Sicily1781. Knight
来源:互联网 发布:mac安装文件删不掉 编辑:程序博客网 时间:2024/05/17 08:39
宽度优先搜索
// Problem#: 1781
// Submission#: 1213022
// The source code is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License
// URI: http://creativecommons.org/licenses/by-nc-sa/3.0/
// All Copyright reserved by Informatic Lab of Sun Yat-sen University
/*典型的宽度优先搜索题,可以先把所有点的距离值初始化为 -1 ,若马跳到某点,那么距离值将会
改变,若某点无法到达,那么距离值则无法更新,直接输出该点距离值即可(即 -1 )。*/
#include <iostream>
#include <cstring>
#include <queue>
using namespace std;
queue<int> q;
int vis[510][510];
int dis[510][510];
int dx[] = {-2, -2, -1, 1, 2, 2, 1, -1};
int dy[] = {-1, 1, 2, 2, 1, -1, -2, -2};
int main()
{
int t;
cin>>t;
while(t--)
{
memset(vis,0,sizeof(vis));
memset(dis,-1,sizeof(dis));
while(!q.empty())
q.pop();
int n,x1,x2,y1,y2;
cin>>n;
cin>>x1>>y1>>x2>>y2;
vis[x1][y1]=1;
dis[x1][y1]=0;
int sum1=x1*n+y1,sum2=x2*n+y2;
if(sum1==sum2)
cout<<0<<endl;
else
{
q.push(sum1);
while(!q.empty())
{
int l=q.front(),x,y;
if(l==sum2)
break;
q.pop();
x=l/n;
y=l%n;
for(int i=0;i<8;i++)
{
int num1=x+dx[i],num2=y+dy[i];
if(num1>=0&&num1<n&&num2>=0&&num2<n)
{
if(!vis[num1][num2])
{
vis[num1][num2]=1;
dis[num1][num2]=dis[x][y]+1;
q.push(num1*n+num2);
}
}
}
}
cout<<dis[x2][y2]<<endl;
}
}
return 0;
}
- Sicily1781. Knight
- Sicily1781(广搜)
- Knight说辞
- Knight Moves
- Knight Moves
- Knight Moves
- Knight Moves
- Knight Moves
- Knight Moves
- Knight Moves
- Knight Moves
- Knight Moves
- Knight Moves
- Knight Moves
- Knight Moves
- Knight Moves
- Knight Moves
- Knight Moves
- 金山词霸 查询接口
- Sicily1424. 奖金
- LINQ 的标准查询操作符
- C# 数值控制
- webview 图片 适应 屏幕大小
- Sicily1781. Knight
- 转:怎么用vs2005打开vs2008 c#的项目
- ruidifx笑话
- Oracle SQL Developer中进行存储过程调试
- android代码混淆
- .刷新/回传后页面保持滚动条位置 asp.net / JS
- Inspections Open at Apple Manufacturers in China
- 让linux2.6.18支持4G的SD卡
- 【第三章】 DI 之 3.2 循环依赖 ——跟我学spring3