#include <stdio.h>
#include <string.h>
int visit[26][26],locatex[626],step[8][2]={-1,-2,1,-2,-2,-1,2,-1,-2,1,2,1,-1,2,1,2};
char locatey[626];
int p,q,cas;
void put()
{
int i;
for(i=0;i<p*q;i++)
printf("%c%d",locatey[i],locatex[i]+1);
printf("\n");
}
int search(int deep,int x,int y)
{
int i,sx,sy;;
if(deep == p*q-1){locatex[deep] = x;locatey[deep] = y + 'A';return 1;}
for(i = 0;i < 8;i++){
sx = x + step[i][0];
sy = y + step[i][1];
if(sx >= 0 && sx < p&& sy >= 0 && sy < q && !visit[sx][sy] ){
visit[sx][sy] = 1; locatex[deep] = x; locatey[deep] = y + 'A';
if(search(deep+1,sx,sy)) return 1;
visit[sx][sy] = 0;//locatex[deep]=-1;locatey[deep]='0';
}
}
return 0;
}
int main()
{
int i;
scanf("%d",&cas);
for(i=1;i<=cas;i++)
{
scanf("%d %d",&p,&q);
memset(visit,0,sizeof(visit));
visit[0][0] = 1;
printf("Scenario #%d:\n",i);
if(search(0,0,0)) put();
else if(p==1 && q==1) printf("A1\n");
else printf("impossible\n");
if(i!=cas) printf("\n");
}
return 0;
}
本文探讨了一种用于在二维矩阵中搜索特定路径的算法,通过递归调用和状态转移实现从矩阵的一个起点到终点的高效寻路。算法采用回溯策略,通过预设的步长和方向矩阵来迭代更新当前位置,最终输出路径坐标。
2358

被折叠的 条评论
为什么被折叠?



