您的位置:首页 > 其它

64.广搜练习跳马问题

2016-03-12 07:59 183 查看







代码:

#include
using namespace std;
#include
#include
#define INF 101
int can[101][101];//1 wei ke
zou,存是否可走2
int dis[101][101];//存距离
int dl1[101],dl2[101];
int xx[]={-2,-2,2,2,1,-1,1,-1};
int yy[]={1,-1,1,-1,2,2,-2,-2};
int n,x,y;
void input()
{
scanf("%d",&n);
scanf("%d%d",&x,&y);
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j)
{
scanf("%d",&can[i][j]);//1 shi ke
zou
}
}
void BFS()
{

memset(dis,-1,sizeof(dis));//memset函数赋初值,只有0和-1是对应的,别的数就不是了
int head=0,tail=0;
++tail;
dl1[1]=x;
dl2[1]=y;
dis[x][y]=0;
while(head
{
++head;
int x0=dl1[head],y0=dl2[head];
for(int i=0;i<8;++i)
{
int x1=x0+xx[i],y1=y0+yy[i];

if(x1>=1&&x1<=n&&y1>=1&&y1<=n&&can[x1][y1]==1&&dis[x1][y1]==-1)//赋初值为-1,是处理走不到的点
{
++tail;
dis[x1][y1]=dis[x0][y0]+1;
dl1[tail]=x1;
dl2[tail]=y1;
}
}
}
}
void out()
{
for(int i=1;i<=n;++i)
{
for(int j=1;j<=n;++j)

printf("%d ",dis[i][j]);
printf("\n");

}
}
int main()
{
input();
BFS();
out();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: