很简单的一题,由于个人的优先队列的定义不正确导致错了!!!
其实这题不用自己定义的!!!
#include<stdio.h>
#include<string.h>#include<queue>
using namespace std;
struct node
{
int x,y;
int time,step;//在这定义的孩子注意了!
};
int map[10][10],n,m;
int startx,starty,endx,endy;
int dir[4][2]={0,1,1,0,-1,0,0,-1};
int judge(int x,int y)
{
if(x>=1&&x<=n&&y>=1&&y<=m)
{
if(map[x][y]!=0)
return 1;
}
return 0;
}
void dfs(int startx,int starty)
{
queue<node>q;
node cur,next;
int x,y,i;
cur.x=startx;cur.y=starty;
cur.time=6;cur.step=0;
map[cur.x][cur.y]=0;
q.push(cur);
while(!q.empty())
{
next=q.front();
q.pop();
for(i=0;i<4;i++)
{
cur.x=x=next.x+dir[i][0];
cur.y=y=next.y+dir[i][1];
cur.time=next.time-1;
cur.step=next.step+1;
if(judge(x,y)&&map[x][y]!=0&&cur.time>0)
{
if(map[x][y]==3)
{
printf("%d\n",cur.step);
return;
}
else if(map[x][y]==4)
{
cur.time=6;
map[x][y]=0;
}
q.push(cur);
}
}
}
printf("-1\n");
}
int main()
{
int T,i,j;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
scanf("%d",&map[i][j]);
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{
if(map[i][j]==2)
{
startx=i;starty=j;
}
}
dfs(startx,starty);
}
return 0;
}
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1072