首页 > 代码库 > poj2488
poj2488
#include<iostream> #include<algorithm> #include<stdio.h> #include<string.h> using namespace std; int T,p,q,vis[30][30],flag; int f[2][8]={{-2,-2,-1,-1, 1,1, 2,2},
{-1, 1,-2, 2,-2,2,-1,1}}; struct node{ int x;int y; }ans[30]; void dfs(int x,int y,int step,int tt) { if (flag) return ;
vis[x][y]=1; ans[step].x=x; ans[step].y=y;
if (step==p*q && flag==0) { flag=1; printf("Scenario #%d:\n",tt); for (int i=1;i<=step;i++) { char c=ans[i].x-1+‘A‘; cout<<c<<ans[i].y; } printf("\n"); printf("\n"); return ; } for (int i=0;i<8;i++) { int nex=x+f[0][i]; int ney=y+f[1][i]; if (nex>=1 && nex<=q && ney>=1 && ney<=p && vis[nex][ney]!=1) dfs(nex,ney,step+1,tt);
} vis[x][y]=0; } int main() { scanf("%d",&T); for (int t=1;t<=T;t++) { flag=0; scanf("%d%d",&p,&q); dfs(1,1,1,t); if (!flag) { memset(vis,0,sizeof(vis)); printf("Scenario #%d:\n",t); printf("impossible\n"); printf("\n"); } } }
poj2488