采用邻接矩阵实现有向网的存储,建立有向网,并实现单源最短路径
来源:互联网 发布:该域名升级访问中 编辑:程序博客网 时间:2024/06/11 19:54
源代码:
#include <stdio.h>
#include <stdlib.h>
#define MAX 20 //定义的数组长度的最大值
#define Infinite 11111 //宏定义的极大值,相当于无穷,即两个点间不连通
struct Graph //代表图的结构体
{
int ljjz[MAX][MAX]; //存储有向网的邻接矩阵
int vertextype[MAX]; //点集(本题无用)
int vexnum; //点的数量
int arcnum; //边的数量
};
int min();
void Dijtstra(); //求单源最短路径的函数
int main()
{
struct Graph graph;
int num,i,j;
int a,b,c;
a = b = c = -1;
printf("请输入点的个数:");
scanf("%d",&num);
graph.vexnum = num;
graph.arcnum = -1;
//初始化邻接矩阵
for(i = 1; i <= num; i++)
{
for(j = 1; j < =num; j++)
{
if(i != j)
{
graph.ljjz[i][j] = Infinite; // 两个点的距离均初始化为极大值
}
else
{
graph.ljjz[i][j] = 0; // 自己到自己的距离设为0
}
}
}
//初始化点集
for(i = 1; i < num; i++)
{
graph.vertextype[i] = 1; //为了图的定义,本题无意义
}
printf("请输入三元组(点的序号 指向的点 权重)\n"); //eg. 第一个点到第二个点的距离为10 则输入:1 2 10(将第一个点设为源点)
do
{
scanf("%d %d %d",&a,&b,&c);
graph.ljjz[a][b] = c;
graph.arcnum++; // 统计边的数量
}
while(a != 0 || b != 0 || c != 0); //结束输入条件:0 0 0
Dijtstra(graph);
return 0;
}
void Dijtstra(struct Graph graph)
{
int i,j,w;
int S[MAX],D[MAX];
S[1] = 1;
for(i = 2; i < graph.vexnum+1; i++)
{
D[i] = graph.ljjz[1][i];
} //vexnum是点的数量
for(j = 1; j < graph.vexnum; j++)
{
w = min(D,S,graph.vexnum);
S[w] = 1;
for(i = 2; i <= graph.vexnum; i++)
{
if(S[i] != 1)
{
if(D[w] + graph.ljjz[w][i] < D[i])
{
D[i] = D[w] + graph.ljjz[w][i];
}
}
}
}
for(i = 2; i <= graph.vexnum; i++)
{
printf("到第%d个点最近的距离:%d\n",i,D[i]);
}
}
int min(int D[],int S[],int n)
{
int i,min,w;
min = Infinite;
w = 2;
for(i = 2; i <= n; i++)
{
if(D[i] <= min && S[i] != 1)
{
min = D[i];
w = i;
}
}
return w;
}
Dijkstra算法基本思想:
- 采用邻接矩阵实现有向网的存储,建立有向网,并实现单源最短路径
- 有向图邻接矩阵实现
- 邻接矩阵实现的有向图
- 邻接矩阵(有向图,无向图实现的差异)
- Python 邻接矩阵实现无向图、有向图的三种方法,并绘图显示
- 数据结构之有向网邻接矩阵Dijkstra实现源点至其余各顶点最短路径
- 有向图的邻接矩阵存储
- 邻接矩阵存储有向图
- 邻接矩阵存储有向图
- 【自己动手写数据结构】 -- 有向带权图的邻接矩阵存储的简单实现
- 用有向图的邻接矩阵存储结构实现prim算法
- 有向图的DFS和BFS(邻接矩阵实现)
- C++邻接矩阵实现有向图、无向图
- 有向网的各种功能实现
- 有向图的邻接矩阵
- 图/网-邻接矩阵-有/无 向网
- 求以邻接矩阵存储的有向无环图中的最长路径
- 构建有向带权图用邻接矩阵求最短路径
- 欢迎使用CSDN-markdown编辑器
- 徒手hypervisor(三)
- UML类图的几种关系和序列图总结
- 工作线程不要对界面操作
- JAVA使用FTPClient类获取linux上的文件最后修改日期少了8小时
- 采用邻接矩阵实现有向网的存储,建立有向网,并实现单源最短路径
- C#在XP系统下调用C++ dll时报找不到指定模块
- DataGridView左键选中行改变行背景色,右键选中行不改变背景色。左键选中行的背景色不变
- phpstorm 2016.2 学习笔记
- LeetCode No.97 Interleaving String
- canvas画正六边形
- AndroidStudio生成自定义的混淆jar包(同时将assets目录打入jar包)(二)(by 星空武哥)
- D3.js Scale 和Axis
- 第一次上这个网站,希望能坚持