您的位置:首页 > 其它

UVA------439 - Knight Moves(bfs简单)

2017-04-26 21:52 337 查看
伐开心,不会用bfs 网上的全都是一样的。。。。

这个程序是错误的

明明是一个简单的dfs。。。可能是我的dfs还是不好吧,等以后再改,,,

后话:老哥我懂了! 这个题是bfs,,,,我真是个傻屌,如此简单

错误程序:

#include <iostream>
#include<cstring>
using namespace std;

int dx[]={-2,-2,-1,-1,+1,+1,+2,+2};
int dy[]={+1,-1,+2,-2,+2,-2,+1,-1};
int pan[15][15];
int n;
int ru=111111111;
int vis[15][15];
int dfs(int x,int y )
{ int n=0;
vis[x][y]=1;
int minn=11111111;
if(pan[x][y]==2)
return 1 ;
for(int i=0;i<8;i++)
{
int xx=x+dx[i],yy=y+dy[i];
if(xx>=1&&xx<=8&&yy<=8&&yy>=1&&vis[xx][yy]==0)
n+=dfs(xx,yy);
if(n<minn)
minn=n;

}
return minn;
}
int main()
{
string s1,s2;
while(cin>>s1>>s2)
{ n=0;
memset(pan,0,sizeof(pan));
int x=8-(s1[1]-'1');
int y=s1[0]-'a'+1;
vis[x][y]=1;
pan[8-(s2[1]-'1')][s2[0]-'a'+1]=2;
cout<
4000
;<"To get from "<<s1<<" to "<<s2<<" takes "<<dfs(x,y)<<" knight moves."<<endl;

}
return 0;
}

网上前篇一律的代码

不开心,今天不想看

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include <algorithm>
#include <set>
#include <queue>
#include <stack>

using namespace std;
struct node
{
int x,y;
int step;
};
int map[110][110];
int vis[110][110];
int jx[]={2,1,1,2,-1,-2,-1,-2};
int jy[]={1,2,-2,-1,2,1,-2,-1};
char str1[20],str2[20];
int n,m;
void bfs(int xx,int yy)
{
int i;
struct node t,f;
queue<node >q;
t.x=xx;t.y=yy;
t.step=0;
q.push(t);
vis[t.x][t.y]=1;
while(!q.empty()){
t=q.front();
q.pop();
if(map[t.x][t.y]==2){
printf("To get from %s to %s takes %d knight moves.\n",str1,str2,t.step);
return ;
}
for(i=0;i<8;i++){
f.x=t.x+jx[i];
f.y=t.y+jy[i];
if(f.x>=0&&f.x<8&&f.y>=0&&f.y<8&&!vis[f.x][f.y]){
vis[f.x][f.y]=1;
f.step=t.step+1;
q.push(f);
}
}

}
}
int main()
{
int s1,s2,t1,t2;
while(~scanf("%s %s",str1,str2))
{
memset(map,0,sizeof(map));
memset(vis,0,sizeof(vis));
s1=str1[0]-'a';
t1=str1[1]-'1';
map[s1][t1]=1;
s2=str2[0]-'a';
t2=str2[1]-'1';
map[s2][t2]=2;
bfs(s1,t1);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: