标签:images imp dia api 国际 start des direction 字母
3
1 1
2 3
4 3
Scenario #1:
A1
Scenario #2:
impossible
Scenario #3:
A1B3C1A2B4C2A3B1C3A4B2C4
#include <iostream> #include <cstdio> #include <cstring> using namespace std; struct path{//记录路径 int r; char c; }p[900]; int r,c;//row,column int flag=0;//表示是否找到要求的路径 ///p*q大于等于1小于等于26,所以p,q也是大于等于小于等于26 int visited[30][30];//标记数组,避免重复 /* 按字典序从小到大的顺序排列方向, 就能保证遍历时是字典序最小的路径 */ const int di[8] = {-1, 1, -2, 2, -2, 2, -1, 1}; const int dj[8] = {-2, -2, -1, -1, 1, 1, 2, 2}; void dfs(int si,int sj,int step); int main() { int n,num=1; scanf("%d",&n); while(n){ scanf("%d%d",&r,&c); memset(visited,0,sizeof(visited)); visited[1][1]=1;//A1点直接初始化 dfs(1,1,1); printf("Scenario #%d:\n",num); if(flag==1){ for(int i=1;i<=r*c;i++){ printf("%c%d",p[i].c,p[i].r); } printf("\n\n"); } else{ printf("impossible\n\n"); } flag=0; n--; num++; } return 0; } void dfs(int si,int sj,int step){ //记录路径 p[step].r=si; p[step].c=‘A‘+sj-1; //一共r*c个点所以能走r*c步就是能走完所有格子 if(step==r*c){ flag=1; return; } //遍历该点的八个方向 for(int i=0;i<8;i++){ int sii=si+di[i]; int sjj=sj+dj[i]; //必须满足这些条件才能进入函数 if(sii>0&&sii<=r&&sjj>0&&sjj<=c&&visited[sii][sjj]==0&&flag==0){ //进入函数的就标记下来 visited[sii][sjj]=1; dfs(sii,sjj,step+1); //不能走完的路径会回溯回来,把这些走过但是不符合要求的点重新化0,让其他方向的路径试 visited[sii][sjj]=0; } } }
标签:images imp dia api 国际 start des direction 字母
原文地址:http://www.cnblogs.com/LuRenJiang/p/7409836.html