Products
GG网络技术分享 2025-11-22 11:07 0

矩阵Zui细小路径和就像是在一个迷宫里找Zui短暂的路一样。我们有一个矩阵,个个格子代表一个点,你Neng从上面的点下来也Neng从左边的点进来。我们要找到从左上角到右下角的Zui短暂路径,把经过的点加起来就是Zui细小路径和。
先说说我们要用C语言写一个程序。这玩意儿程序就像一个指南,告诉计算机怎么走迷宫。代码有点麻烦,但是不用担心,我会磨蹭磨蹭教你的。
/* 输出后来啊到屏幕 */
for {
/* geng新鲜Zui长远路线 */
path_l = path_l;
}
return sum
w = prev;
if { /* 如连通 */
{
for{
if
int sum=;
这是单源的Zui短暂路径算法。
printf;
// 用Dijkstra算法求有向网G的v0顶点到其余顶点v的Zui短暂路径P
//Zui细小值函数声明
//展示Zui佳路径函数
printf,imax,jmax);
//求正对角线和函数
printf,imin,jmin);
#define N /* 顶点数目 */
n_l = ;
int w = u;
if )
void Dijkstra{
Ru果你还不懂的话, 就kan一些关于图论的问题,这玩意儿Zui短暂路是图论中的一个经典题
n_e = ; /* 到 i 的Zui短暂路线的结点数 */
d=d+G.arcs; p=k;
int temp = maxint;
ee = el = ; /* 初始化头结点 */
return max;
// 修改D和P, w∈V-S
//主函数
final = FALSE;
int i;
*imax=i;
int min=;
int getmin
//调用dijkstra算法
int graph = { /* 图的邻接矩阵 */
temp = dist;
int TopologicalOrder
else p=-; //-1表示无直接前驱
ee = I;
C语言代码://清华巨大学出版社光盘的代码
if{//顶点编号参数错误
//找出路径长远度Zui细小的顶点k
Dijkstra;
// 及其带权长远度D。
s = ;//源节点作为一开头的s子集
max=a;
}/* for */
//其余各顶点的Zui短暂路径
int i,j,t;
int newdist = dist + cost;
程序写优良了 放在一起的,公用一个主函数,Ru果不要kan得出来哪个功Neng就把哪块干掉,Ru果这你dou不会我就没办法了!!!
int a, b, w;
int maxint = ;//定义一个Zui巨大的数值, 作为不相连的两个节点的代价权值
p=malloc*G.n);
cost=malloc*);
{I, I, I, , , I, I},
prev = v;
//求不赞成角线和函数
//计算加入新鲜的节点后geng新鲜路径使得其产生代价Zui短暂
int u = v;
D = min + G.arcs.adj;
int getmax
/* 初始化数据 */
for P = P; //第v行赋值于第w行
void PrintPath{
for { // 其余G.vexnum-1个顶点
PrintPath;//输出v到i的路径
indegree = ; /* 初始化入度 */
int TopologicalOrder; /* 拓扑排序函数 */
*imin=i;
return ? : ;
//一个记录图的邻接矩阵
} MGraph;
#include stdlib.h
int n,v,u;
// final为TRUE当且仅当v∈S,即Yi经求得从v0到v的Zui短暂路径。
typedef struct graph{
if { /* 如入度为零 */
G代表i到j的距离, 甲,乙,丙,丁,戊用1,,,,5代替
//Zui巨大值函数声明
int ee, el; /* Zui长远Zui短暂距离 */
//输入代价矩阵
if {
min = INFINITY; // 当前所知离v0顶点的Zui近距离
int i, j, top, count;
final = TRUE; // 离v0顶点Zui近的v加入S集
if{
s = ;
int n,e;//顶点数、边数
int **cost;//代价矩阵
int getlsum
int *prev;//前一跳节点地方
int kind;//类型:0有向图;1无向图;2有向网;3无向网
*jmax=j;
int G = {};
int i, j, k, l;
G = G + G;
/* 提取拓扑序列的元素 */
s=;d=; //确定源点自身的Zui短暂路径长远度
ee = graph + ee;
way=malloc*);
path_l = ;
//加入具有Zui细小代价的邻居节点到s子集
printf: %2d Path: &#;, i + , el);
if // w顶点在V-S中
int *dist;//Zui短暂路径代价
ifcontinue;
count++;
Stack = i; /* 入栈 */
G = w;
int *way ;
if { v = w; min = D; } // w顶点离v0顶点geng近
ShowPath;
// 若P为TRUE,则w是从v0到v当前求得Zui短暂路径上的顶点。
s=;d=G.arcs;
Demand feedback