poj 1135求算法大牛见教
poj 1135求算法大牛指教
#include <stdio.h>
#define INF 2147483647
#define MAXN 505
int Edge[MAXN][MAXN];
int sys=1;//测试数据号
int time[MAXN];//第i个牌倒下的时间
int s[MAXN];//记录第i个牌是否倒下
int n,m;
int v1,v2,t;
void read()
{
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++) Edge[i][j]=INF;
}
for(int i=0;i<m;i++)
{
scanf("%d %d %d",&v1,&v2,&t);
v1--;
v2--;
Edge[v1][v2]=Edge[v2][v1]=t;
}
}
void dijkstra()
{
for(int i=0;i<n;i++)
{
time[i]=Edge[0][i];
s[i]=0;
}
s[0]=1;time[0]=0;
for(int i=0;i<n;i++)
{
int u=0,min=INF;
for(int j=0;j<n;j++)
{
if(!s[j]&&time[j]<min)
{
min=time[j];
u=j;
}
}
s[u]=1;
for(int k=0;k<n;k++)
{
if(!s[k]&&Edge[u][k]<INF&&time[u]+Edge[u][k]<time[k])
time[k]=time[u]+Edge[u][k];
}
}
double max1=-INF;
int pos1;
for(int i=0;i<n;i++)
{
if(time[i]>max1)
{
max1=time[i];
pos1=i;
// printf("%lf\n",max1);
}
}
double max2=-INF,t;
int pos2,pos3;
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
t=(time[i]+time[j]+Edge[i][j])/2.0;
if(t>max2&&Edge[i][j]<INF)
{
#include <stdio.h>
#define INF 2147483647
#define MAXN 505
int Edge[MAXN][MAXN];
int sys=1;//测试数据号
int time[MAXN];//第i个牌倒下的时间
int s[MAXN];//记录第i个牌是否倒下
int n,m;
int v1,v2,t;
void read()
{
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++) Edge[i][j]=INF;
}
for(int i=0;i<m;i++)
{
scanf("%d %d %d",&v1,&v2,&t);
v1--;
v2--;
Edge[v1][v2]=Edge[v2][v1]=t;
}
}
void dijkstra()
{
for(int i=0;i<n;i++)
{
time[i]=Edge[0][i];
s[i]=0;
}
s[0]=1;time[0]=0;
for(int i=0;i<n;i++)
{
int u=0,min=INF;
for(int j=0;j<n;j++)
{
if(!s[j]&&time[j]<min)
{
min=time[j];
u=j;
}
}
s[u]=1;
for(int k=0;k<n;k++)
{
if(!s[k]&&Edge[u][k]<INF&&time[u]+Edge[u][k]<time[k])
time[k]=time[u]+Edge[u][k];
}
}
double max1=-INF;
int pos1;
for(int i=0;i<n;i++)
{
if(time[i]>max1)
{
max1=time[i];
pos1=i;
// printf("%lf\n",max1);
}
}
double max2=-INF,t;
int pos2,pos3;
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
t=(time[i]+time[j]+Edge[i][j])/2.0;
if(t>max2&&Edge[i][j]<INF)
{