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. 我觉得 没什么问题啊! 请各位大侠帮忙看看~

Posted by ahda at 2009-11-08 17:43:07 on Problem 2421
#include <iostream>
using namespace std;

struct node{
	int v;  //村庄编号
	node *pNext;
};
class Problem{
	int arr[101][101];
	node inList;  //已经联通的村庄
	node outList; //未联通的村庄
	int n;   //村庄数
	long length;  //目标最短路径

public:
	Problem(int n)
	{
		this->n = n;
		length = 0;
		inList.pNext = NULL;
		outList.pNext = NULL;
	}

	void getMatrix()//读取矩阵
	{
		for (int i = 1; i <= n; i++)
			for (int j = 1; j <= n; j++)
				cin >> arr[i][j];
	}

	void initInList()   //根据Q个行来初始化已经联通的村庄,和未联通的村庄
	{
		int q = 0;
		int* isInList = new int[n + 1];  //N个村庄的联通情况
		for (int i = 1; i <= n; i++)
			isInList[i] = 0;
		cin >> q;
		for (int j = 0; j < 2 * q; j++)
		{
			int v = 0;
			cin >> v;
			isInList[v] = 1;
		}
		node *tmp1 = &inList;
		node *tmp2 = &outList;
		for (int s = 1; s <= n; s++)
		{
			node *tmp = new node;
			tmp->v = s;
			tmp->pNext = NULL;
			if (1 == isInList[s])
			{
				tmp1->pNext = tmp;
				tmp1 = tmp;
			}
			else
			{
				tmp2->pNext = tmp;
				tmp2 = tmp;
			}
		}
	}

	void getLong() //将未联通的村庄一个个添加到联通的集里
	{

		while(outList.pNext)
		{
			node *perfect = outList.pNext;
			int value = 0;
			node *in = inList.pNext;
			if (in)
				value = arr[in->v][perfect->v];
			while (in)
			{
				node *out = outList.pNext;
				while (out)
				{
					if (arr[in->v][out->v] < value)
					{
						perfect = out;
						value = arr[in->v][out->v];
					}
					out = out->pNext;
				}
				in = in->pNext;
			}
			node *tmp = &outList;
			while (tmp->pNext != perfect)
			{
				tmp = tmp->pNext;
			}
			tmp->pNext = perfect->pNext;
			perfect->pNext = inList.pNext;
			inList.pNext = perfect;
			length += value;
		}
	}

	void go()
	{
		getMatrix();
		initInList();
		getLong();
		cout << length << endl;
	}
};
int _tmain(int argc, _TCHAR* argv[])
{
	int n = 0;
	cin >> n;
	Problem p(n);
	p.go();
	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