您的位置:首页 > 其它

POJ 2488 A Knight's Journey

2015-09-19 16:57 246 查看
读懂题意就知道是一个简单的DFS了
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
#define N 30
int vis

;
int a

;
int m,n;
int ok;
int dir[8][2] = {{-1,-2},{1,-2},{-2,-1},{2,-1},{-2,1},{2,1},{-1,2},{1,2}};
void dfs(int x,int y,int step)
{
if(step==m*n)
{
for(int i=0; i<m*n; i++)
{
printf("%c%d",a[i][1]+'A',a[i][0]+1);
}
ok=1;
printf("\n");
return;
}
for(int i=0; i<8; i++)
{
int xx=x+dir[i][0];
int yy=y+dir[i][1];
if(xx>=0&&xx<m&&yy>=0&&yy<n&&!vis[xx][yy])
{
vis[xx][yy]=1;
a[step][0]=xx;
a[step][1]=yy;
dfs(xx,yy,step+1);
vis[xx][yy]=0;
if(ok)
{
return;
}
}
}
}
int main()
{
int t;
scanf("%d",&t);
int k=1;
while(t--)
{
ok=0;
memset(vis,0,sizeof(vis));
scanf("%d%d",&m,&n);
vis[0][0]=1;
a[0][0]=0;
a[0][1]=0;
printf("Scenario #%d:\n",k++);
dfs(0,0,1);
if(!ok)
{
printf("impossible\n");
}
printf("\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: