无向图的最短路径

summonarchon 2013-06-08 03:43:45
请问各位大牛无向图的最短路径应该怎么求啊?权值默认为1,想破脑子也没想出来应该怎么办。。。我看了几种算法,不知道是我太笨还是怎么地,没想出来
...全文
967 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
summonarchon 2013-06-16
  • 打赏
  • 举报
回复
谢谢了各位~问题解决了
summonarchon 2013-06-13
  • 打赏
  • 举报
回复
是不是应该先遍历一遍图再使用最短路径算法?无向图里边两个点之间有联系为1,无联系就为0,那么a[i][j]>a[i][e]+a[e][j]不是根本不能成立么?当权值为1的时候
billvsme 2013-06-11
  • 打赏
  • 举报
回复
floyd算法 或者Dijkstra算法 这个是floyd

#include <stdio.h>

int main(void)
{
    int k,m;
    int i,j,e;
    int u,v,w;
    while(scanf("%d %d",&k,&m)!=EOF)
    {
        int a[110][110];
        for(i=1;i<=k;++i)
        {
            for(j=1;j<=k;++j)
            {
                a[i][j] = 65535;
            }
        }
        while(m--)
        {
            scanf("%d %d %d",&u,&v,&w);
            a[u][v] = w;
            a[v][u] = w;
        }

        for(e=1;e<=k;++e)
        {
            for(i=1;i<=k;++i)
            {
                for(j=1;j<=k;++j)
                {
                    if(a[i][e]<65535 && a[e][j]<65535 && a[i][j]>a[i][e]+a[e][j])
                        a[i][j] = a[i][e] + a[e][j];
                }
            }
        }
        if(a[1][k]!=65535)
            printf("%d\n",a[1][k]);
        else
            printf("NULL\n");

    }
    return 0;
}
  • 打赏
  • 举报
回复
floyed无向图也可以用
summonarchon 2013-06-10
  • 打赏
  • 举报
回复
权值都等于一的话,G[i][j]>G[i][k]+G[k][j],那不是永远都不可能成立么?不好意思,我初学,很多都还不清楚
summonarchon 2013-06-10
  • 打赏
  • 举报
回复
这个无向图适用?
hugett 2013-06-10
  • 打赏
  • 举报
回复
floyd算法。。G是图的邻接矩阵。。

	int G[N][N];
	for(int k = 0; k < N; ++k){
		for(int i = 0; i < N; ++i){
			for(int j = 0; j < N; ++j){
				if(G[i][j] > G[i][k] + G[k][j]) G[i][j] = G[i][k] + G[k][j];
			}
		}
	}
summonarchon 2013-06-08
  • 打赏
  • 举报
回复
能不能写一段代码做个例子让我参考下呢?
hugett 2013-06-08
  • 打赏
  • 举报
回复
如果路径权值都为1。。。直接对每一个点进行一次广度优先搜索就可以了。。 如果是一般的图,就用floyd算法。。这个写起来简单。。
summonarchon 2013-06-08
  • 打赏
  • 举报
回复
有木有具体一点的代码。。。我拿那些代码真心头疼,书上的看不懂,不知道怎么改这些代码
zjwzcnjsy 2013-06-08
  • 打赏
  • 举报
回复
引用 11 楼 summonarchon 的回复:
而且弗洛伊德算法不是有向的么?还是带权的,我想要的是不带权,或者默认为1的
无向相当于有向的双向。
菜鸟起航 2013-06-08
  • 打赏
  • 举报
回复
floyd算法可以,建图的时候权值都为1不就行了
summonarchon 2013-06-08
  • 打赏
  • 举报
回复
而且弗洛伊德算法不是有向的么?还是带权的,我想要的是不带权,或者默认为1的
summonarchon 2013-06-08
  • 打赏
  • 举报
回复
看不懂。。。
Jackie_Zhu 2013-06-08
  • 打赏
  • 举报
回复
floyd算法就可以搞定
zjwzcnjsy 2013-06-08
  • 打赏
  • 举报
回复
任意顶点,那就是多源的,可以使用floyd算法,时间复杂度O(n^3)
summonarchon 2013-06-08
  • 打赏
  • 举报
回复
而且是对顶点之间的,最短路径
summonarchon 2013-06-08
  • 打赏
  • 举报
回复
我能说我看不懂么。。。我能说我想要的只是权值默认为1的么。。。我本身就不是学计算机的,让我搞这些东西,死了心都有了
青松2 2013-06-08
  • 打赏
  • 举报
回复
褚六 2013-06-08
  • 打赏
  • 举报
回复
dijkstra 百度上就有代码...
加载更多回复(3)

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧