//============================================================================
// Name : POJ_2488_DFS.cpp
// Author : tiger
// Version :
// Copyright : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================
#include <iostream>
#include <stdio.h>
using namespace std;
bool visited[27][27];
int num;
int path[27][2];
int dir[8][2]={
{-2,-1},{-2,1},
{-1,-2},{-1,2},
{1,-2},{1,2},
{2,-1},{2,1}
};
int p,q;
bool available(int x,int y)
{
if(x < 0 || x >=p || y <0 || y >= q || visited[x][y] )
return false;
return true;
}
bool dfs(int x,int y)
{
path[num][0] = x;
path[num][1] = y;
visited[x][y]= true;
num ++;
if(num == p*q)
return true;
for(int i = 0; i < 8; i++)
{
if(available(x+dir[i][0],y+dir[i][1]) && dfs(x+dir[i][0],y+dir[i][1]))
return true;
}
visited[x][y]= false;
num --;
return false;
}
int main() {
freopen("in","r",stdin);
int n;
scanf("%d",&n);
for(int i =1; i <= n; i++)
{
scanf("%d %d",&q,&p);
printf("Scenario #%d:/n",i);
num = 0;
memset(visited,0,sizeof(visited));
if(dfs(0,0))
{
for(int j = 0; j < num; j++)
{
printf("%c%d",path[j][0] + 'A',path[j][1]+1);
}
printf("/n");
}
else
printf("impossible/n");
printf("/n");
}
return 0;
}
POJ_2488_DFS
最新推荐文章于 2022-02-23 15:02:25 发布