澳门皇冠官网app日常队列的出队方式是投机出列。因为这么发生对后行之中的数还是保留在好后来寻觅父节点。

http://www.cnblogs.com/summerRQ/articles/2470130.html
常见队列的出队方式是对准头有列
先期队列这虽然是随一定的事先级出队的尽管好于医院里面急诊病人优先看病
扣押下一鸣题可以助了解优先队列
http://acm.tzc.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=1335

/*
http://acm.tzc.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=3128

/*
题意:
a被累死在监狱外的情侣r想要去营救他
里面有士兵x遇到士兵时r可以杀掉他,但是会耗时一分钟
,结果如果出口救到a的至少时

感受技巧:
本条题用数组模拟对列
因为这么有对后行之中的数码还保留在好后来找父节点
若果用stl的模板出队后行的数量还勾了;不爱物色父节点;

注意:
4 3
.r#
.x#
.##
a##
发生同种情景是休活动x比移动x花费的时光不见,,()坑

*/

*/

include

include

include

include

include

include

include

using namespace std;
char map1[4]= {‘E’,’S’,’W’,’N’};//映射方向
char miGong[105][105];
int vis[105][105];
int dir[4][2]= {0,1,1,0,0,-1,-1,0};
int m,n;
struct note
{
int x;
int y;
int faX;//记录方向
int fu;//记录父节点
} q[105*105];
bool bfs(int sx,int sy,int ex,int ey,int &bN)
{
int head=1;
int tail=1;
q[tail].x=sx;
q[tail].y=sy;
tail++;
vis[sx][sy]=1;
while(head<tail)
{
if(q[head].x==ex&&q[head].y==ey)
{
bN=head;
return true;
}
for(int i=0; i<4; i++)
{
int tx=q[head].x+dir[i][0];
int ty=q[head].y+dir[i][1];
if(tx<0||ty<0||tx>=m||ty>=n)
continue;
if(miGong[tx][ty]!=’#’&&vis[tx][ty]==0)
{
vis[tx][ty]=1;
q[tail].x=tx;
q[tail].y=ty;
q[tail].fu=head;//保存父节点
q[tail].faX=i;//保存方向
tail++;
}
}
head++;
}
return false;
}
void out(int x)
{
if(x==1)//第一只节点 即是进口
return;//退回上同步调用函数的的岗位
out(q[x].fu);
printf(“%c”,map1[q[x].faX]);//输出方向
}
int main()

{
while(~scanf(“%d%d”,&m,&n))
{
memset(miGong,’#’,sizeof(miGong));
memset(vis,0,sizeof(vis));
int sx,sy,ex,ey;
for(int i=0; i<m; i++)
for(int j=0; j<n; j++)
{
scanf(” %c”,&miGong[i][j]);
if(miGong[i][j]==’S’)
{
sx=i;
sy=j;
}
if(miGong[i][j]==’E’)
{
ex=i;
ey=j;
}
}
int bN;
if( bfs(sx,sy,ex,ey,bN))
{
out(bN);
printf(“\n”);
}
else printf(“Can’t eat it!\n”);
}
return 0;
}

/*
5 5
…..
…..

include

.

ES…

include

5 5
….S
…..

include

const int XY=205;
char miGong[XY][XY];
int vis[XY][XY];
int dir[4][2]= {0,1,1,0,0,-1,-1,0};
int m,n;
using namespace std;
struct note
{
int x;
int y;
int s;
friend bool operator <(note n1,note n2)//自己定义一种优先级
{
return n1.s>n2.s;//时间不见的先行级赛(注意过或小于号)
}
};
int bfs(int sx,int sy,int ex,int ey)
{
memset(vis,0,sizeof(vis));
note a;
a.x=sx;
a.y=sy;
a.s=0;
vis[sx][sy]=1;
priority_queue

q;
q.push(a);
while(!q.empty())
{
a=q.top();//注意勿是q.front();
q.pop();
// cout<<miGong[a.x][a.y]<<” “;
if(a.x==ex&&a.y==ey)return a.s;
for(int i=0; i<4; i++)
{
int tx=a.x+dir[i][0];
int ty=a.y+dir[i][1];
if(tx<0||ty<0||tx>=m||ty>=n)
continue;
if(miGong[tx][ty]!=’#’&&vis[tx][ty]==0)
{
vis[tx][ty]=1;
note b;
b.x=tx;
b.y=ty;
if(miGong[tx][ty]==’x’)
b.s=a.s+2;
else b.s=a.s+1;
q.push(b);
}
}
}
return -1;
}
int main()
{

while(~scanf("%d%d",&m,&n))
{
    memset(miGong,0,sizeof(miGong));
    int startX,startY,endX,endY;
    for(int i=0; i<m; i++)
        for(int j=0; j<n; j++)
        {
            scanf(" %c",&miGong[i][j]);
            if(miGong[i][j]=='r')
            {
                startX=i;
                startY=j;
            }
            if(miGong[i][j]=='a')
            {
                endX=i;
                endY=j;
            }
        }
    int b=bfs(startX,startY,endX,endY);
    if(b==-1 )
        printf("Poor ANGEL has to stay in the prison all his life.\n");
    else
        printf("%d\n",b);
}
return 0;

}

/*
4 3
.r#
.x#
.##
a##

*/

.

E….

*/

/*

深搜

*/

include

include

include

include

using namespace std;
char map1[4]= {‘E’,’S’,’W’,’N’};
char miGong[105][105];
int vis[105][105];
int dir[4][2]= {0,1,1,0,0,-1,-1,0};
int m,n,cur=0,min1=999999;
int sx,sy,ex,ey;
int a[105*105];
int b[105*105],k,k1;
void dfs(int x,int y,int s)
{
if(x==ex&&y==ey)
{
cur=1;
if(s<min1)
{
min1=s;
for(int i=0; i<k; i++)//把最出色的路径保存下来
b[i]=a[i];
k1=k;
k=0;
}
return ;
}
for(int i=0;i<4;i++)
{
int tx=x+dir[i][0];
int ty=y+dir[i][1];
if(tx<0||ty<0||tx>=m||ty>=n)
continue;
if(miGong[tx][ty]!=’#’&&vis[tx][ty]==0)
{
vis[tx][ty]=1;
a[k++]=i;
dfs(tx,ty,s+1);
k–;//每退回一差 出库一次
vis[tx][ty]=0;
}
}
}
int main()
{
while(~scanf(“%d%d”,&m,&n))
{
memset(miGong,’#’,sizeof(miGong));
memset(vis,0,sizeof(vis));
min1=9999;
k=k1=0;
for(int i=0; i<m; i++)
for(int j=0; j<n; j++)
{
scanf(” %c”,&miGong[i][j]);
if(miGong[i][j]==’S’)
{
sx=i;
sy=j;
}
if(miGong[i][j]==’E’)
{
ex=i;
ey=j;
}
}
dfs(sx,sy,0);
if(cur==1)
{
for(int i=0;i<k1;i++)
printf(“%c”,map1[b[i]]);
printf(“\n”);
}
else printf(“Can’t eat it!\n”);
}
return 0;
}

相关文章