33,028
社区成员
发帖
与我相关
我的任务
分享#include <iostream>
using namespace std;
struct Graph
{
int **dis;
int number;
};
int f(Graph &G)
{
int min=-1;
int *visit=new int[G.number]; //访问标记
for (int i=0;i<=G.number-1;++i)
{
visit[i]=0;
}
while(min!=G.number-1)
{
min=-1;
for (int i=1;i<=G.number-1;++i)
{
if (visit[i]==0)
{
if (min==-1)
{
min=i;
}
else if(G.dis[0][i]<G.dis[0][min])
{
min=i;
}
else
;
}
}
visit[min]=1;
for (int i=1;i<=G.number-1;++i)
{
if (visit[i]==0&&G.dis[0][i]>G.dis[min][i]+G.dis[0][min])
{
G.dis[0][i]=G.dis[min][i]+G.dis[0][min];
G.dis[i][0]=G.dis[min][i]+G.dis[0][min];
}
}
}
return G.dis[0][G.number-1];
}
int main()
{
Graph G;
cin>>G.number;
G.dis=new int*[G.number];
for (int i=0;i<=G.number-1;++i)
{
G.dis[i]=new int[G.number];
}
for (int i=0;i<=G.number-1;++i)
{
for (int j=0;j<=G.number-1;++j)
{
cin>>G.dis[i][j];
}
}
cout<<f(G);
system("pause");
return 0;
}