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

请AC了的同学帮忙看看,为什么我这个为RE

Posted by lironghua at 2008-05-24 10:38:51 on Problem 2965
#include <iostream>
#include <cstdio>

using namespace std;

char ch;
bool v[66000];

typedef struct node
{
	int i,j,f;
}node;

node p[66000];
int now;

int main ()
{
	int i,j;
	int s,e,q[66000],d[66000],t,temp,u;
	bool flag;
	now = 0;
	for (i = 0; i < 4; i++)
		for (j = 0; j < 4; j++)
		{
			cin >> ch;
			if (ch == '+')
			{
				now = 2 * now + 1;
			}
			else
			{
				now = 2 * now;
			}
		}
	flag = false;
	memset (d,0,sizeof (d));
	memset (v,false,sizeof (v));
	p[now].f = -1;
	s = 0;
	e = 1;
	q[s] = now;
	while (s < e)
	{		
		t = q[s++];
		u = t;
		if (v[t] == false)
		{
			v[t] = true;
			for (i = 0; i < 4; i++)
			{
				for (j = 0; j < 4; j++)
				{
					t = u;
                                        //将第i行取反
					temp = 1;
					temp <<= ((3 - i) * 4 + 3);
					t = t ^ temp;
					temp = 1;
					temp <<= ((3 - i) * 4 + 2);
					t = t ^ temp;
					temp = 1;
					temp <<= ((3 - i) * 4 + 1);
					t = t ^ temp;
					temp = 1;
					temp <<= ((3 - i) * 4);
					t = t ^ temp;
				        //将第i列取反		
					temp = 1;
					temp <<= (15 - j);
					t = t ^ temp;
					temp = 1;
					temp <<= (11 - j);
					t = t ^ temp;
					temp = 1;
					temp <<= (7 - j);
					t = t ^ temp;
					temp = 1;
					temp <<= (3 - j);
					t = t ^ temp;
                                        //将(i,j)位置处再次取反,因为在前面已经取反了两次,所以要再次取反
					temp = 1;
					temp <<= ((3 - i) * 4 + (3 - j));
					t = t ^ temp;
						
					if (t == 0)
					{
						flag = true;
						p[t].f = u;
						p[t].i = i + 1;
						p[t].j = j + 1;
						d[t] = d[u] + 1;
						break;
					}
					if (v[t] == false)
					{
						q[e++] = t;
						d[t] = d[u] + 1;
						p[t].f = u;
						p[t].i = i + 1;
						p[t].j = j + 1;
					}
				}
				if (flag)
					break;
			}
			if (flag)
				break;
		}
	}
	if (flag)
	{
		cout << d[t] << endl;
		while (t != now)
		{
			cout << p[t].i << " " << p[t].j << endl;
			t = p[t].f;
		}
	}
	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