示例代码
#include <iostream>
#define maxsize 10;
#define maxweight 100;
using namespace std;
int weight[10][10];
int size;
int d[10] = {-1, 0, -1, -1, -1, -1, -1, -1, -1, -1};
int shortest = 100;
void init()
{
for(int i = 0; i < 10; i ++)
for(int j = 0; j < 10; j ++)
weight[i][j] = 100;
cout << "请输入顶点个数:" << endl;
cin >> size;
for(int i = 1; i <= size; i ++)
{
cout << "请输入第" << i << "个顶点指向几个顶点" << endl;
int num;
cin >> num;
for(int j = 1; j <= num; j ++)
{
int vertex;
cout << "请输入指向的顶点的序号和该边的权值" << endl;
cin >> vertex;
cin >> weight[i][vertex];
}
}
}
int WSDG(int v1, int v2)
{
if(weight[v1][v2] != 100)
{
d[v1] = v2;
return weight[v1][v2];
}
int dist = maxweight;
for(int i = 1; i <= size; i ++)
{
if(weight[v1][i] != 100 && i != v1)
{
int x = weight[v1][i] + WSDG(i, v2);
if(x < dist)
{
dist = x;
d[v1] = i;
}
}
}
return dist;
}
void print()
{
int i;
for(i = 1; i != size; i = d[i])
cout << i << "->" ;
cout << i << endl;
}
int main(int argc, const char * argv[]) {
init();
cout << "最短路径为: " << WSDG(1, size) << endl;
cout << "节点顺序为: " ;
print();
return 0;
}