您的位置:首页 > 其它

UVa439(BFS最短路实现)

2015-07-26 20:37 323 查看
#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速度快,找到最短路径即返回
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: