1 #include2 #include 3 #include 4 #include 5 #define Max 0x7f7f7f7f 6 using namespace std; 7 struct node 8 { 9 int x; 10 int y; 11 int time ; 12 friend bool operator < ( node a,node b) 13 { 14 return a.time>b.time;//开始错在这个地方了,感觉这里好怪啊,这个排序的东西我在单独写篇吧 15 } 16 }; 17 int dir[4][2]={ { 1,0},{-1,0},{ 0,-1},{ 0,1}}; 18 char map[205][205]; 19 int visited[205][205]; 20 int ans[205][205]; 21 int n,m; 22 23 void bfs(int x,int y) 24 { 25 memset(visited,0,sizeof(visited)); 26 memset(ans,Max,sizeof(ans)); 27 priority_queue que; 28 node head,tail,tmp; 29 head.x=x; 30 head.y=y; 31 head.time=0; 32 que.push(head); 33 visited[x][y]=1; 34 ans[x][y]=0; 35 while(!que.empty()) 36 { 37 tmp=que.top(); 38 que.pop(); 39 if(map[tmp.x][tmp.y]=='r') 40 { 41 return ; 42 } 43 for(int i=0;i<4;i++) 44 { 45 tail.x=tmp.x+dir[i][0]; 46 tail.y=tmp.y+dir[i][1]; 47 if(visited[tail.x][tail.y]==0 && tail.x>=0 && tail.x =0 &&tail.y
我这里写的稍微有点复杂了,复杂在用了ans[][]来保存结果,其实不用这样,node 中的time已经保存了多要求的值了,所以改成 int bfs(),在适当的地方返回一个正确的值就ok了