Poj 2488 A Knight's Journey

题目大意:马周游问题,输出字典序最小的周游路径。

思路:比较水的题目,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;
}


你可能感兴趣的:(c)