题目大意:马周游问题,输出字典序最小的周游路径。
思路:比较水的题目,DFS,直接贴代码了。
#include <stdio.h> int data[9][9]; int q,p,flag; int diry[8]={-2,-2,-1,-1, 1,1, 2,2}; int dirx[8]={-1, 1,-2, 2,-2,2,-1,1}; int datax[80]; int datay[80]; void DFS(int c,int x,int y) { int x1,y1,i,j; if (flag==1) return; data[x][y]=1; datax[c]=x; datay[c]=y; if (c==p*q-1) { flag=1; return; } for (i=0;i<8;i++) { x1=x+dirx[i]; y1=y+diry[i]; if (x1>=0&&x1<p&&y1>=0&&y1<q&&data[x1][y1]==0) { DFS(c+1,x1,y1); } } data[x][y]=0; } int main() { int t,i,j,k,ctr; scanf("%d",&t); for (ctr=1;ctr<=t;ctr++) { scanf("%d%d",&p,&q); for (i=0;i<=p;i++) for (j=0;j<=q;j++) data[i][j]=0; flag=0; DFS(0,0,0); if (flag==1) { printf("Scenario #%d:\n",ctr); for (i=0;i<p*q;i++) printf("%c%d",datay[i]+'A',datax[i]+1); printf("\n"); } else { printf("Scenario #%d:\nimpossible\n",ctr); } if (ctr!=t) printf("\n"); } return 0; }