64.广搜练习跳马问题
2016-03-12 07:59
225 查看
代码:
#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;
}
相关文章推荐
- 64.广搜练习跳马问题
- 64.广搜练习跳马问题
- 【索引】读书笔记-代码大全
- .net破解一(反编译,反混淆-剥壳,工具推荐)
- C#使用Dotfuscator混淆代码的加密方法
- 日经春秋 20160312
- DeleteDirectory删除文件和文件夹下所有文件的工具类
- c++编程规范的纲要和记录
- 天声人語 20160312 「もっと保育園を作れ」
- msxml dom 全解析
- 客户端网页编程,第二章思维导图
- C语言回顾与再学习——数组与指针
- C++ Exceptional 写异常安全的代码
- 客户端网页编程,第一章思维导图
- Linux/Unix工具与正则表达式的POSIX规范
- 为什么要对url进行encode
- lintcode-medium-4 Sum
- java多线程与线程间通信的原理和方法
- [leetcode] 170. Two Sum III - Data structure design 解题报告
- Unix Network Programming1