#define MAXV12// 最大顶点个数
#define INF32767// 表示无穷大
typedef char ElemType;
typedef struct {
int no;// 顶点编号
ElemType info;// 顶点其他信息
} VertexType;// 顶点类型
typedef struct {// 图的定义
int edges[MAXV][MAXV];// 邻接矩阵
int n, e;// 分别为顶点数和边数
VertexType vexs[MAXV];// 存放顶点信息
} MGraph;// 声明图的邻接矩阵类
void Unknown(MGraph g, int v)
{
int dist[MAXV], path[MAXV];
int s[MAXV];
int mindis, i, j, u, pre;
int edge[MAXV][2], edgenum = 0;
for(i = 0; i < g.n; i++) {
dist[i] = g.edges[v][i];
s[i] = 0;
if(g.edges[v][i] < INF)
path[i] = v;
else
path[i] = -1;
}
s[v] = 1;
path[v] = 0;
for(i = 0; i < g.n; i++) {
mindis = INF;
u = -1;
for(j = 0; j < g.n; j++)
if(s[j] == 0 && dist[j] < mindis) {
u = j;
mindis = dist[j];
}
s[u] = 1;
for(j = 0; j < g.n; j++)
if(s[j] == 0)
if(g.edges[u][j] < INF && dist[u] + g.edges[u][j] < dist[j]) {
dist[j] = dist[u] + g.edges[u][j];
path[j] = u;
}
}
for(i = 0; i < g.n; i++)
if(s[i] == 1 && i != v) {
j = i;
pre = path[i];
edge[edgenum][0] = pre;
edge[edgenum][1] = i;
edgenum++;
}
for(i = 0; i < edgenum; i++)
printf(" (%d,%d):%d\n", edge[i][0], edge[i][1], g.edges[edge[i][0]][edge[i][1]]);
}
05-28