【问题描述】
有一张城市地图,图中的顶点为城市,无向边代表两个城市间的连通关系,边上的权为在这两个城市之间修建高速公路的造价,研究后发现,这个地图有一个特点,即任一对城市都是连通的。现在的问题是,要修建若干高速公路把所有城市联系起来,问如何设计可使得工程的总造价最少?
【输入格式】
n(城市数,1<=n<=100)
e(边数)
以下e行,每行3个数i,j,wij,表示在城市i,j之间修建高速公路的造价。
【输出格式】
n-1行,每行为两个城市的序号,表明这两个城市间建一条高速公路。
【输入样例】
5 8
1 2 2
2 5 9
5 4 7
4 1 10
1 3 12
4 3 6
5 3 3
2 3 8
【输出样例】
1 2
2 3
3 4
3 5
1 #include2 #include 3 #include 4 using namespace std; 5 int maxn=0x7fffffff; 6 int map[101][101]; 7 int minn[101]; 8 int vis[101]; 9 int vis2[101][101];10 int main()11 {12 int n,m;13 scanf("%d%d",&n,&m);14 for(int i=0;i<=n;i++)minn[i]=maxn;15 for(int i=0;i<=n;i++)16 for(int j=0;j<=n;j++)17 {18 if(i==j)19 map[i][j]=0;20 else21 map[i][j]=maxn;22 }23 for(int i=1;i<=m;i++)24 {25 int x,y,z;26 scanf("%d%d%d",&x,&y,&z);27 map[x][y]=z;28 map[y][x]=z;29 }30 for(int i=1;i<=n;i++)31 {32 if(map[1][i])33 minn[i]=map[1][i];34 }35 minn[1]=0;36 vis[1]=1;37 int now=1;38 for(int i=2;i<=n;i++)39 {40 int k=0;41 for(int j=2;j<=n;j++)42 {43 if(vis[j]==0&&minn[j]