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

为什么是Run time error?

Posted by sanpin at 2006-11-20 19:12:40 on Problem 2387
/* simply using Dijkastra*/ 
#include <iostream>
#include <cstring>
using namespace std;

const int MAXSIZE=1010;
const int MAXINT=5000;
typedef struct
{
	int next,dist;
}NextPoint;

int landMark[MAXSIZE][MAXSIZE]={0};//describe distance bettween land marks
int close[MAXSIZE];// points to choose from
bool marked[MAXSIZE]={false};// points already included
int N,T;

void Input()
{
	cin>>N>>T;
	int i,j;	
	
	while (T--)
	{
		cin>>i>>j;
		cin>>landMark[i][j];
		landMark[j][i]=landMark[i][j];
	}
/*	for (i=1;i<=N;i++)
	{
		for (j=1;j<=N;j++)
			cout<<landMark[i][j]<<' ';
		cout<<endl;
	}*/
}

void FindClose(NextPoint &p)
{
	int i;
	int closestDist=MAXINT,closestPoint;

	for (i=1;i<=N;i++)
	{
		if (!marked[i]&&close[i]!=0&&close[i]<closestDist)
		{
			closestDist=close[i];
			closestPoint=i;
		}
	}
//	cout<<"Dis & add:"<<closestDist<<' '<<closestPoint<<endl;
	p.dist=closestDist;
	p.next=closestPoint;
}

void UpdateDist(NextPoint &p)
{
	int i;
	for (i=1;i<=N;++i)
	{
		if (!marked[i]&&landMark[p.next][i]!=0&&(p.dist+landMark[p.next][i]<close[i]||close[i]==0))
		{
			close[i]=p.dist+landMark[p.next][i];
		}
	}
}


int main()
{
	Input();
	int i;
	for (i=1;i<=N;i++)
	{
			close[i]=landMark[N][i];
	}
	NextPoint p;
	marked[N]=true;  //added start point

	while (1)
	{
		FindClose(p);
		marked[p.next]=true;
		if (marked[1])
			break;
		UpdateDist(p);
	}
	cout<<p.dist<<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