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

一直wa,怎么会错呢,试了n多数据都没问题啊,求帮助!

Posted by 771385494 at 2012-07-24 15:14:35 on Problem 1307
#include <iostream>
using namespace std;

char maze[25][49],str[5];
int visited[13][13];
int n,m,begin_x,end_x,begin_y,end_y;
int step;

void Init()
{
	int i,j;
	step = 1;
	memset(maze,0,sizeof(maze));
	memset(visited,0,sizeof(visited));
	memset(str,0,sizeof(str));
	for(i = 0;i < 49;i++)//第一行
		if(i % 4 == 0)
			maze[0][i] = '+';
		else
			maze[0][i] = '-';

	for(i = 1;i < 24;i++) {//中间
		for(j = 4;j < 49;j += 4) {
			if(i % 2 != 0)
				maze[i][j] = 0;
			else
				maze[i][j] = '+';
		}
		if(i % 2 != 0)//最后一列
			maze[i][48] = maze[i][0] = '|';
		else
			maze[i][48] = maze[i][0] = '+';
	}
	memcpy(maze[24],maze[0],49);
}

bool go_west(int x,int y)//西
{
	if(maze[x * 2 - 1][y * 4 - 4] == '|' || maze[x * 2 - 1][y * 4 - 3] == '+' || visited[x][y - 1] == 1)
		return false;
	else
		return true;
}

bool go_north(int x,int y)//北
{
	if(maze[x * 2 - 2][y * 4  - 1] == '-' || maze[x * 2 - 2][y * 4 - 1] == '+' || visited[x - 1][y] == 1)
		return false;
	else
		return true;
}

bool go_east(int x,int y)//东
{
	if(maze[x * 2 - 1][y * 4] == '|' || maze[x * 2 - 1][y * 4] == '+' || visited[x][y + 1] == 1)
		return false;
	else
		return true;
}

bool go_south(int x,int y)//南
{
	if(maze[x * 2][y * 4 - 1] == '-' || maze[x * 2][y * 4 - 1] == '+' || visited[x + 1][y] == 1)
		return false;
	else
		return true;
}

bool findPath(int x,int y)
{
	//cout << x << " " << y << endl;
	//itoa(step++,str,10);
	int i = 0,tmp = step++;
	while(tmp != 0){
		str[i++] = tmp % 10 + '0';
		tmp /= 10;
	}
	if(strlen(str) == 1)
		maze[x * 2 - 1][y * 4 - 1] = str[0];
	else if(strlen(str) == 2) {
		maze[x * 2 - 1][y * 4 - 2] = str[1];
		maze[x * 2 - 1][y * 4 - 1] = str[0];
	}
	else {
		maze[x * 2 - 1][y * 4 - 3] = str[2];
		maze[x * 2 - 1][y * 4 - 2] = str[1];
		maze[x * 2 - 1][y * 4 - 1] = str[0];
	}
	visited[x][y] = 1;
	if(x == end_x && y == end_y)//递归出口
		return true;
	if(go_west(x,y) == true && findPath(x,y - 1) == true)
		return true;
	if(go_north(x,y) == true && findPath(x - 1,y) == true)
		return true;
	if(go_east(x,y) == true && findPath(x,y + 1) == true)
		return true;
	if(go_south(x,y) == true && findPath(x + 1,y) == true)
		return true;
	else {
		maze[x * 2 - 1][y * 4 - 3] = '?';
		maze[x * 2 - 1][y * 4 - 2] = '?';
		maze[x * 2 - 1][y * 4 - 1] = '?';
		step--;
		return false;
	}
}
int main()
{
	int i,j,k = 1;
	cin >> n >> m >> begin_x >> begin_y >> end_x >> end_y;
	while(n != 0 && m != 0 && begin_x != 0 && begin_y != 0 && end_x != 0 && end_y != 0) {
		Init();
		//for(i = 0;i < 25;i++) {//测试
		//	for(j = 0;j < 49;j++)
		//		cout << maze[i][j];
		//	cout << endl;
		//}
		int value;
		for(i = 1;i <= n;i++)
			for(j = 1;j <= m;j++) {
				cin >> value;
				if(value == 0) {}//没有东墙,没有南墙
				else if(value == 1)//只有东墙
					maze[i * 2 - 1][j * 4] = '|';
				else if(value == 2) {//只有南墙
					maze[i * 2][j * 4 - 3] = '-';
					maze[i * 2][j * 4 - 2] = '-';
					maze[i * 2][j * 4 - 1] = '-';
				}
				else {//东墙,南墙都有
					maze[i * 2 - 1][j * 4] = '|';
					maze[i * 2][j * 4 - 3] = '-';
					maze[i * 2][j * 4 - 2] = '-';
					maze[i * 2][j * 4 - 1] = '-';
				}
			}
		memcpy(maze[n * 2],maze[24],49);//复制一行
		for(i = 0;i < 15;i++)//复制一列
			maze[i][m * 4] = maze[i][48];
		for(i = 0;i <= n * 2;i++) {//测试
			for(j = 0;j <= m * 4;j++)
				cout << maze[i][j];
			cout << endl;
		}
		findPath(begin_x,begin_y);
		cout << "Maze " << k++ << endl;
		cout << endl;
		for(i = 0;i <= n * 2;i++) {//输出结果
			for(j = 0;j <= m * 4;j++)
				cout << maze[i][j];
			cout << endl;
		}
		cout << endl;
		cin >> n >> m >> begin_x >> begin_y >> end_x >> end_y;
	}
	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