Visitors hit counter dreamweaver

poj 2488 DFS

  同样的knight问题,但是在OJ上面出的就不一样了。。。哎,好难啊!!我按照以前的方法来写,大的方向和方法都是对的。但是就是那些小细节方面折腾呢。跑出来的结果不对,最后只能看别人对的,然后再改自己的。  不爽。哎,其实题目考的内容很简单,但是非得搞那些说不清的来绊倒你!

#include <iostream>
#include <cstdio>
#include <fstream>
#include <memory.h>

#define MAX 27
using namespace std;

int chess[MAX][MAX],sx[MAX],sy[MAX];
int dx[]={-2,-2,-1,-1,1,1,2,2};
int dy[]={-1,1,-2,2,-2,2,-1,1};
int n,i,j,p,q,sign,step;

void Trace(int x,int y){
if(sign) return; //已经完成遍历,直接返回
int i,ax,ay;
step++;
sx[step]=x;
sy[step]=y;
if(step==p*q){
sign=1;
return ;
}
for(i=0 ;i<8 ;i++){
ax=x+dx[i];
ay=y+dy[i];
if(chess[ax][ay]==0 && ax>0 && ax<=p
&& ay>0 && ay<=q){
chess[ax][ay]=1;
Trace(ax,ay);
step--;
chess[ax][ay]=0;
}
}
}

int main()
{
int t=0;
freopen("acm.txt","r",stdin);
scanf("%d",&n);
while(n--){
t++;
step=0;
sign=0;
scanf("%d%d",&p,&q);
memset(chess,0,sizeof(chess));
chess[1][1]=1;
Trace(1,1);
printf("Scenario #%d:\n",t);
if(sign){
for(i=1 ;i<=p*q ;i++)
{
printf("%c%d",sy[i]+64,sx[i]);
}
printf("\n");
}
else{
printf("impossible\n");
}
if(n) printf("\n");
}
return 0;
}

 

posted @ 2012-03-11 02:13  Jason Damon  阅读(170)  评论(0编辑  收藏  举报