题目大意:
在n×m棋盘上有一中国象棋中的马:
马走日字;
马只能往右走。
请你找出一条可行路径,使得马可以从棋盘的左上角走到右下角。
输入:9 5/*棋盘规模*/
1/*测试次数*/
0 0 8 4/*位置按照矩阵的下标而写*/
输出:(0,0)->(2,1)->(4,2)->(6,3)->(8,4)
分析:深度优先搜索,不断回溯,并用path[]记录下路径
#include<stdio.h>
#define N 100
int path[N],x1,y1,x2,y2,n,m;
int step[][2]={{-2,1},{-1,2},{1,2},{2,1}};
void search(int a,int b,int cur) {
int i,x,y;
if(a==x2&&b==y2) {
x=x1,y=y1;
printf("(%d,%d)",x,y);
for(i=1;i<cur;i++) {
x+=step[path[i]][0];
y+=step[path[i]][1];
printf("->(%d,%d)",x,y);
}
printf("\n");
return;
}
for(i=0;i<4;i++){//因为一直向右走,所以路径不可能重复,所以不用考虑这点
x=a+step[i][0];
y=b+step[i][1];
if(x>=n||y>=m||x<0||y<0) continue;
path[cur]=i;
search(x,y,cur+1);
}
}
int main() {
int t;
scanf("%d %d",&n,&m);//棋盘规模
scanf("%d",&t);//测试次数
while(t--) {
scanf("%d %d %d %d",&x1,&y1,&x2,&y2);//起点和终点
search(x1,y1,1);
}
system("pause");
return 0;
}