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

这题的测试数据有问题吧!记录数组开10*10一直给我RE,开到100*100就AC了

Posted by nan5515522 at 2014-06-26 08:39:59 on Problem 2488
一个这么水的DFS吃了快10次RE以为递归退出条件错了呢。。。。
后面做这题的兄弟记住了,别相信题中的数组大小,数组就是往大了开!

#include <iostream>
#include <algorithm>
#include <cstdio>
#include<queue>
#include<vector>
using namespace std;

int dirX[] = {-2, -2, -1, -1,  1, 1,  2, 2};
int dirY[] = {-1,  1, -2,  2, -2, 2, -1, 1};

// int visit[10][10];   这里10*10就RE改成下面的100*100就AC
int visit[100][100];    按理说9*9都足够了(0行0列没用)


int size, p, q;
int note1[100], note2[100];

bool dfs(int x, int y, int pos)
{
	int i, nextX, nextY;
	note1[pos] = x;  note2[pos] = y;
	if(pos == p * q)
		return true;
	visit[x][y] = 1;

	for(i = 0; i < 8; i++)
	{
		nextX = x + dirX[i]; nextY = y + dirY[i];
		if(nextX >= 1 && nextX <= p
		&& nextY >= 1 && nextY <= q)
		{
			if(visit[nextX][nextY] == -1 && dfs(nextX, nextY, pos + 1))
			   return true;
		}
	}
	visit[x][y] = -1;
	return false;

}

int main()
{
	int i, j,count = 1;
	bool flag;
	cin >> size;
	while(size--)
	{
		cin >> q >> p;
		for(i = 1; i <= p; i++)
		{
			for(j = 1; j <= q; j++)
			{
				visit[i][j] =-1;
			}
		}
		
		flag =false;
		for(i = 1; i <= p; i++)
		{
			for(j = 1; j <= q; j++)
			{
				if(dfs(i, j, 1))
				{
					flag = true;
					break;
				}
			}
			if(flag)
				break;
		}
		cout << "Scenario #" << count++ <<":" << endl;
		if(flag)
		{
			for(i = 1; i <= p * q; i++)
				cout << (char)(note1[i] - 1 + 'A') << note2[i];
			cout << endl;
		}
		else
			cout << "impossible" << endl;
		cout << endl;
		
	}
	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