当前位置:首页 » 编程语言 » c语言最短路径

c语言最短路径

发布时间: 2024-12-25 14:03:52

Ⅰ 可运行的c语言程序:旅行商求最短路径问题

在无向完全图中,对于任意两个顶点vi和vj,我们可以在多项式时间内找到vi和vj这两个顶点之间的所有路径,选择其中路程最短的一条,令S[i,j]表示vi和vj这两个顶点之间最短距离的那条路径。搜索路径S[i,j],找到vi到达的在S[i,j]上的第一个顶点,记该顶点为vk,将其记录在数组中R[][],递归查找vi到vk和vk到vj的最短路径及其相应权值,最后将数组D[]中的顶点和权值之和打印出来即为所求,并用画图函数将行经过程画出。

Ⅱ 如何用C语言实现求迷宫的最短路径

#include<stdio.h>
#include<stdlib.h>
#define M 8
#define N 8
#define Max 100
int mg[M+2][N+2]= //定义迷宫,0表示能走的块,1表示不能走,在外围加上一圈不能走的块
{
{1,1,1,1,1,1,1,1,1,1},
{1,0,0,1,0,0,0,1,0,1},
{1,0,0,1,0,0,0,1,0,1},
{1,0,0,0,0,1,1,0,0,1},
{1,0,1,1,1,0,0,0,0,1},
{1,0,0,0,1,0,0,0,0,1},
{1,0,1,0,0,0,1,0,0,1},
{1,0,1,1,1,0,1,1,0,1},
{1,1,0,0,0,0,0,0,0,1},
{1,1,1,1,1,1,1,1,1,1}
};
struct
{
int i,j; //块的位置
int pre; //本路径中上一块在队列中的下标
}Qu[Max];
int front=-1,rear=-1;
void print(int n);
int mgpath(int xi,int yi,int xe,int ye) //搜索算法
{
int i,j,find=0,di;
rear++;
Qu[rear].i=xi;
Qu[rear].j=yi;
Qu[rear].pre=-1;
mg[1][1]=-1;
while(front<=rear&&!find)
{
front++;
i=Qu[front].i;
j=Qu[front].j;
if(i==xe&&j==ye)
{
find=1;
print(front);
return(1);
}
for(di=0;di<4;di++)
{
switch(di) //四个方向
{
case 0:i=Qu[front].i-1;j=Qu[front].j;break;
case 1:i=Qu[front].i;j=Qu[front].j+1;break;
case 2:i=Qu[front].i+1;j=Qu[front].j;break;
case 3:i=Qu[front].i;j=Qu[front].j-1;break;
}
if(mg[i][j]==0)
{
rear++;
Qu[rear].i=i;
Qu[rear].j=j;
Qu[rear].pre=front;
mg[i][j]=-1; //避免死循环
}
}
}
return 0;
}

void print(int n) //输出 路径算法
{
int k=n,j,m=1;
printf("\n");
do //将输出的路径上的所有pre改为-1
{
j=k;
k=Qu[k].pre;
Qu[j].pre=-1;
}while(k!=0);
printf("迷宫最短路径如下:\n");
k=0;
while(k<Max)
{
if(Qu[k].pre==-1)
{
printf("\t(%d,%d)",Qu[k].i,Qu[k].j);
if(m%5==0)
printf("\n");
m++;
}
k++;
}
printf("\n");
}
int main()
{
mgpath(1,1,M,N);
system("pause");
return 0;
}

Ⅲ 如何用C语言来求最短路径

使用发散的方法,从起点开始,一次增加一个接点,也就是增加一个路径,直到,目的接点出现,那么你做了几次发散,路径就是几,而且它就是最短路径。

如果不对,请把题目说的详细一点,尤其是哪个概率。

Ⅳ C璇瑷濡备綍瀹炵幇5涓锘庡竞涔嬮棿姹傛渶鐭璺寰勚 浠峣鍑哄彂锛屾渶缁埚洖鍒痨銆 姹傛渶鐭璺寰勯梾棰樸 鍙鐢ㄧ┓涓炬潵瀹屾垚銆

//杩欎釜绠楁硶钖嶅瓧鍙杩𨱒版柉鐗规媺绠楁硶
#include<stdio.h>
#include<stdlib.h>
#definemax11000000000
inta[1000][1000];
intd[1000];//d琛ㄧず镆愮壒瀹氲竟璺濈
intp[1000];//p琛ㄧず姘镐箙杈硅窛绂
inti,j,k;
intm;//m浠h〃杈规暟
intn;//n浠h〃镣规暟
intmain()
{
scanf("%d%d",&n,&m);
intmin1;
intx,y,z;
for(i=1;i<=m;i++)
{
scanf("%d%d%d",&x,&y,&z);
a[x][y]=z;
a[y][x]=z;
}
for(i=1;i<=n;i++)
d[i]=max1;
d[1]=0;
for(i=1;i<=n;i++)
{
min1=max1;
for(j=1;j<=n;j++)
if(!p[j]&&d[j]<min1)
{
min1=d[j];
k=j;
}
p[k]=j;
for(j=1;j<=n;j++)
if(a[k][j]!=0&&!p[j]&&d[j]>d[k]+a[k][j])
d[j]=d[k]+a[k][j];
}
for(i=1;i<n;i++)
printf("%d->",p[i]);
printf("%d ",p[n]);
return0;
}

热点内容
N号房用户试图花钱删除访问记录 发布:2024-12-26 02:06:51 浏览:231
现在电脑主机都什么配置 发布:2024-12-26 02:05:12 浏览:786
sinsftp 发布:2024-12-26 01:44:34 浏览:397
安卓手机好多隐藏软件怎么清除 发布:2024-12-26 01:39:27 浏览:766
linux数据库登陆 发布:2024-12-26 01:38:54 浏览:22
sql被注入 发布:2024-12-26 01:18:05 浏览:560
数据的常见存储模式有 发布:2024-12-26 01:14:27 浏览:872
快手怎么上传整首歌曲 发布:2024-12-26 01:06:14 浏览:763
添加索引的sql语句 发布:2024-12-26 01:06:13 浏览:868
在哪里查看电信宽带账号和密码 发布:2024-12-26 01:05:36 浏览:120