上述题目
我用的dijkstra算法:
我的代码输出不了,估计中间有地方错了
#include<stdio.h>
#define INF 37628
void Dijkstra(int **a,int dist[],int v,int n)
{
int mark[201];
int i,j,min,x;
for(i=0;i<=n;i++)
{
mark[i]=0;
dist[i]=*((int *)a+n*v+j);
}
mark[v]=1;
for(i=1;i<n;i++)
{
min=INF;
for(j=1;j<=n&&mark[j]==0;i++)
if(dist[j]<min)
{
min=dist[j];
x=j;
}
mark[x]=1;
for(j=1;j<=n&&mark[j]==0;j++)
if(dist[j]>dist[x]+*((int *)a+n*x+j)&&*((int *)a+n*x+j)<INF)
dist[j]=dist[x]+*((int *)a+n*x+j);
}
}
int main()
{
int n,i,j;
scanf("%d",&n);
int edge[201][201];
for(i=0;i<=n;i++)
for(j=0;j<=n;j++)
edge[i][j]=INF;
for(i=1;i<n;i++)
for(j=i+1;j<=n;j++)
scanf("%d",edge[i]+j);
int dist[201];
Dijkstra((int **)edge,dist,1,n);
printf("%d\n",dist[n]);
}