练习

#define MAXV​12​// 最大顶点个数
#define INF​32767​// 表示无穷大
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]]);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值