Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

哪位高手帮忙看看,为什么过不了啊??(附代码)

Posted by eleana at 2005-07-20 18:41:28 on Problem 2488
#include <stdio.h>
#include <stack>
#include <queue>
const int maxn=8;
int p,q;
int board[maxn][maxn];
typedef struct
{
	int i,j;
}sss;
sss square[maxn*maxn];
using namespace std;
stack<sss> s;
int fk[maxn][2]={{-1,-2},{1,-2},{-2,-1},{2,-1},{-2,1},{2,1},{-1,2},{1,2}};
void init()
{
	int i,j;
	for(i=0;i<maxn;i++)
		for(j=0;j<maxn;j++)
		{
			board[i][j]=0;
			square[i*maxn+j].i=i;
			square[i*maxn+j].j=j;
		}
}
bool DFS(int x,int y,int n)
{
	s.push(square[x*maxn+y]);
	board[x][y]=1;
	if(n==p*q) return true;
	int k,xx,yy;
	for(k=0;k<maxn;k++)
	{
		xx=fk[k][0]+x;yy=fk[k][1]+y;
		if(xx>=p||yy>=q||xx<0||yy<0) continue;
		if(board[xx][yy]) continue;
		if(DFS(xx,yy,n+1)) return true;
	}
	s.pop();
	board[x][y]=0;
	return false;
}
		
void doit()
{
	char ch;
	sss temp;
	if(DFS(0,0,1))
	{
		queue<sss> q;
		while(!s.empty())
		{
			q.push(s.top());
			s.pop();
		}
		while(!q.empty())
		{
			s.push(q.front());
			q.pop();
		}
		while(!s.empty())
		{
			temp=s.top();
			s.pop();
	 		ch=temp.j+65;
			printf("%c%d",ch,temp.i+1);
		}
	}
	else
		printf("impossible");
	printf("\n\n");
}
int main()
{
	int N;
	int i;
	scanf("%d",&N);	
	init();
	for(i=0;i<N;i++)
	{
		scanf("%d%d",&p,&q);
		printf("Scenario #%d:\n",i+1);
		doit();
	}
	return 0;
}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator