UVa439(BFS最短路实现)

来源:互联网 发布:淘宝的旗舰店可信吗 编辑:程序博客网 时间:2024/04/30 04:59
#include <iostream>using namespace std;struct Node{int x;int y;int step;}que[100]; int book[8][8];string beginstr;string endstr;int endx;int endy;int direct[8][2]={{2,1},{2,-1},{-1,2},{-1,-2},{1,2},{1,-2},{-2,-1},{-2,1}};int main(){while(cin>>beginstr>>endstr){int x=8-(beginstr[1]-'0');int y=beginstr[0]-'a';endx=8-(endstr[1]-'0');endy=endstr[0]-'a';int flag=0;int head=0;int tail=0;que[tail].x=x;que[tail].y=y;que[tail].step=0;tail++;book[x][y]=1;//别忘了确保队列不为空 while(head<tail){for(int i=0;i<8;i++){int dx=que[head].x+direct[i][0];int dy=que[head].y+direct[i][1];if(dx>=8||dx<0||dy>=8||dy<0)continue;if(dx==endx&&dy==endy){flag=1;break;}if(book[dx][dy]==0){book[dx][dy]=1;//BFS必须要标记已走过的点 que[tail].x=dx;que[tail].y=dy;que[tail].step=que[head].step+1;tail++;}}if(flag)break;head++;//别忘了head++才能对下一个点进行拓展 }cout<<que[tail-1].step<<endl;}return 0;} 


比DFS速度快,找到最短路径即返回

0 0
原创粉丝点击