| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
各位路过的好心人,看看那里错了,谢谢!#include <stdio.h>
#include <climits>
typedef int* IntArrayPtr;
int main()
{
int n,m;
int j=0;
while(scanf("%d%d",&n,&m)!=EOF && !(n==0 && m==0))
{
int ii,jj;
if(n==1)
{
j++;
printf("System #%d\nThe last domino falls after 0.0 seconds, at key domino 1.\n\n",j);
continue;
}
IntArrayPtr *cell = new IntArrayPtr[n+1];
int *d = new int[n+1];
bool *final = new bool[n+1];
for(int i5 = 0;i5<n+1;i5++)
final[i5] = false;
for(int i1 = 0;i1<n+1;i1++)
{
cell[i1] = new int[n+1];
}
for(int i3 = 1;i3<n+1;i3++)
for(int i4=1;i4<n+1;i4++)
{
//cell[i3][i4] = -1;
cell[i3][i4] = INT_MAX;
}
int n1,n2,time;
for(int i15=0;i15<m;i15++)
{
scanf("%d%d%d",&n1,&n2,&time);
if(n1>n2)
{
int temp = n1;
n1 = n2;
n2 = temp;
}
cell[n1][n2] = time;
}
int cell_max = 0;
/*for(int i9 = 1;i9<n+1;i9++)
for(int i10=1;i10<n+1;i10++)
{
if(cell[i9][i10]>cell_max)
{
cell_max = cell[i9][i10];
}
}
for(int i11 = 1;i11<n+1;i11++)
{
for(int i12=1;i12<n+1;i12++)
{
if(cell[i11][i12] == -1)
{
cell[i11][i12] = cell_max+1;
}
//cout<<cell[i11][i12]<<" ";
}
//cout<<endl;
}*/
for(int i12=2;i12<n+1;i12++)
{
d[i12] = cell[1][i12];
}
d[1] = 0;
final[1] = true;
int v;
for(int i6 = 2;i6<n+1;i6++)
{
int min = INT_MAX;
for(int i7 = 2;i7<n+1;i7++)
{
if(!final[i7] && d[i7]<min)
{
v = i7;
min = d[i7];
}
}
final[v] = true;
for(int i8 = 2;i8<n+1;i8++)
{
if(v>i8)
{
ii = v;
jj = i8;
}
else
{
ii = i8;
jj = v;
}
if(!final[i8] && d[v]+cell[jj][ii]<d[i8])
d[i8] = d[v] + cell[jj][ii];
}
}
int max = 0;
for(int t1=1;t1<n+1;t1++)
{
if(d[t1]>max)
max = d[t1];
}
int *times = new int[n+1];
for(int j1=1;j1<n+1;j1++)
{
times[j1] = max-d[j1];
//cout<<d[j1]<<" "<<endl;
}
bool flag = false;
double sum = 0;
for(int j2 = 1;j2<n+1;j2++)
{
for(int j3=j2+1;j3<n+1;j3++)
{
if(cell[j2][j3]!=INT_MAX && (cell[j2][j3]-times[j2]-times[j3]>0) && (cell[j2][j3]-times[j2]-times[j3])/2.0>sum)
{
flag = true;
sum = (cell[j2][j3]-times[j2]-times[j3])/2.0;
ii = j2;
jj = j3;
}
}
}
if(flag)
{
j++;
printf("System #%d\nThe last domino falls after %.1f seconds, between key dominoes %d and %d.\n\n",j,d[n]+sum,ii,jj);
}
else
{
j++;
printf("System #%d\nThe last domino falls after %.1f seconds, at key domino %d.\n\n",j,d[n]+sum,n);
}
for(int j = 0;j<n+1;j++)
{
delete []cell[j];
}
delete []cell;
delete []d;
delete []final;
delete []times;
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator