|
发表于 2013-7-15 19:27:37
|
显示全部楼层
poj2488 骑士遍历问题
dfs
#include<iostream>
#include<stdio.h>
using namespace std;
int dpy[8]={-1,1,-2,2,-2,2,-1,1},dpx[8]={-2,-2,-1,-1,1,1,2,2};
int visit[30][30],path[50][2],tx,ty,v;
bool dfs(int x,int y,int step)
{
for(int i=0;i<8;i++)
{
int x1=x+dpx[i],y1=y+dpy[i];
if(x1>=1&&x1<=tx&&y1>=1&&y1<=ty&&visit[x1][y1]==0&&v<tx*ty)
{
path[step][0]=x1;
path[step][1]=y1;
v++;
visit[x1][y1]=1;
dfs(x1,y1,step+1);
if(v==tx*ty)
return true;
visit[x1][y1]=0;
v--;
}
}
}
int main()
{
int cas,n=0;
cin>>cas;
while(cas--)
{
n++;
v=1;
memset(visit,0,sizeof(visit));
memset(path,0,sizeof(path));
cin>>ty>>tx;
path[0][0]=1;
path[0][1]=1;
visit[1][1]=1;
dfs(1,1,1);
printf("Scenario #%d:\n",n);
if(path[tx*ty-1][0]!=0)
{
for(int i=0;i<tx*ty;i++)
{
cout<<(char)(path[i][0]+64)<<path[i][1];
}
}
else
{
cout<<"impossible";
}
cout<<endl<<endl;
}
return 0;
} |
|