http://poj.org/problem?id=2488
#include<stdio.h>
#include<string.h>
int dir_x[8]={-2,-2,-1,-1,1,1,2,2};
int dir_y[8]={-1,1,-2,2,-2,2,-1,1};
struct f{
int x;
int y;
}path[100];
int vis[30][30];
int m,n,t,step,mark;
bool dfs(int x,int y,int step)
{
if(mark==1) return true;
path[step].x=x;
path[step].y=y;
vis[x][y]=1;
if(step==m*n) {mark=1; return true;}
for(int i=0;i<8;i++)
{
int xl=x+dir_x[i];
int yl=y+dir_y[i];
if(1<=xl&&xl<=m&&1<=yl&&yl<=n&&vis[xl][yl]==0)
{
if(dfs(xl,yl,step+1)) return true;
vis[xl][yl]=0;
}
}
return false;
}
int main()
{
scanf("%d",&t);
int T=0;
while(t--)
{
scanf("%d%d",&n,&m);
printf("Scenario #%d:\n",++T);
int flag=0;
for(int i=1;i<=m;i++)
{
for(int j=1;j<=n;j++)
{
memset(vis,0,sizeof(vis));
mark=0;
if(dfs(i,j,1))
{
flag=1;
for(int i=1;i<=m*n;i++)
printf("%c%d",path[i].x+64, path[i].y);
break;
}
}
if(flag==1) break;
}
if(flag==0)
{
printf("impossible");
}
printf("\n\n");
}
return 0;
}
poj 2488 A Knight's Journey
最新推荐文章于 2023-01-31 11:15:00 发布