网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
11月12日漏签0天
c语言吧 关注:801,123贴子:4,371,187
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 13回复贴,共1页
<<返回c语言吧
>0< 加载中...

发一道题目,过几天再发答案!大家试一试,很有代表性的题

  • 取消只看楼主
  • 收藏

  • 回复
  • 李树花开
  • 异能力者
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
问题 K: 数据结构(C语言版)算法7.16__最短路径Floyd
题目描述 求带权有向图中任意2个顶点之间的最短路径。输入先输入顶点个数及边的条数;然后依次输入各条边的信息,包括起点,终点,权值。输出输出任意2点间的路径长度信息。
1)如果存在路径,则输出路径长度,如“1->2:2”表示顶点1至顶点2的路径长度为2;
2)如果不存在路径,则输出No Path。如“1->2:No Path”。样例输入3,5
0,1,4
1,0,6
1,2,2
0,2,11
2,0,3
样例输出0->1:4
0->2:6
1->0:5
1->2:2
2->0:3
2->1:7
提示


  • 李树花开
  • 异能力者
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
建议大家先看一看Floyd算法,这道题主要是测试这个算法!


2025-11-12 21:09:02
广告
不感兴趣
开通SVIP免广告
  • 李树花开
  • 异能力者
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
问题 K: 数据结构(C语言版)算法7.16__最短路径Floyd
题目描述 求带权有向图中任意2个顶点之间的最短路径。输入先输入顶点个数及边的条数;然后依次输入各条边的信息,包括起点,终点,权值。输出输出任意2点间的路径长度信息。
1)如果存在路径,则输出路径长度,如“1->2:2”表示顶点1至顶点2的路径长度为2;
2)如果不存在路径,则输出No Path。如“1->2:No Path”。
样例输入
3,5
0,1,4
1,0,6
1,2,2
0,2,11
2,0,3
样例输出
0->1:4
0->2:6
1->0:5
1->2:2
2->0:3
2->1:7
刚才题目有点小错误,再次修正一下


  • 李树花开
  • 异能力者
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
什么是可耻的百度了一下啊?


  • 李树花开
  • 异能力者
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
别灰心,看一下离散或者数据结构的教学视频会有一些帮助的!说实话,如果叫我自学数据结构的话我也会崩溃的!有个人教的话好的多!


  • 李树花开
  • 异能力者
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
http://www.cnblogs.com/twjcnblog/archive/2011/09/07/2170306.html
这里讲的Floyd 算法还比较清晰,大家可以看一看!


  • 李树花开
  • 异能力者
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

只不过语言是C++


  • 李树花开
  • 异能力者
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
如果存在路径 是指存在最短路径
1->2:2 是1至2的 最短路径上各边 权值之和为2!


2025-11-12 21:03:02
广告
不感兴趣
开通SVIP免广告
  • 李树花开
  • 异能力者
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
书上的确是有,可是你能保证你敲出的程序,能按我的题目的要求输出正确的答案吗?理论和实际是不同的!


  • 李树花开
  • 异能力者
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
严蔚敏写的真是不太容易懂,在某些地方简直不知道他在说什么!我记得看那个子串位置的定位函数kmp算法足足看了七八个小时,才勉强看懂,够坑爹的!不过书写的的确很好,那种分函数的思想,宏定义的应用,指针的技巧。。。这完全是在实战开发,起点高了些!


  • 李树花开
  • 异能力者
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
算了,明天发答案吧!


  • 李树花开
  • 异能力者
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
#include <stdio.h>#include<string.h>
#define MAX_NAME 5 typedef int VRType;/*宏定义*/
#define OK 1 #define FALSE 0 #define TRUE 1
#define INFINITY 100000 #define MAX_VERTEX_NUM 20
typedef int DistancMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
typedef struct {
int arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
int vexnum,arcnum; }MGraph;/*定义一个结构体数组,包括记录权值的邻接矩阵数组,总顶点数,以及初始的弧的数目*/
int CreateDN(MGraph *G)/*构建该结构体的函数*/
{
int i,j,k,b;
scanf("%d,%d",&(*G).vexnum,&(*G).arcnum);/*要求输入顶点数,以及弧的数目*/
for(i=0;i<(*G).vexnum;++i)
for(j=0;j<(*G).vexnum;++j)
{
(*G).arcs[i][j]=INFINITY;/*首先在邻接矩阵内置最大值即+∞,这里的+∞用一个较大的值代替*/
}
for(k=0;k<(*G).arcnum;k++)
{
scanf("%d,%d,%d",&i,&j,&b); /*输入arcnum个弧的信息,起点,终点,以及权值*/
(*G).arcs[i][j]=b;
}
return OK;
}
void ShortestPath_FLOYD(MGraph G,DistancMatrix *D)/*FLOYD算法*/
{
int u,v,w;
for(v=0;v<G.vexnum;v++)
for(w=0;w<G.vexnum;w++)
{
(*D)[v][w]=G.arcs[v][w];/*将结构体内邻接矩阵的信息记入D数组*/
}
for(u=0;u<G.vexnum;u++)/*这才是FLOYD算法的精华部分*/
for(v=0;v<G.vexnum;v++)
for(w=0;w<G.vexnum;w++)
if((*D)[v][u]+(*D)[u][w]<(*D)[v][w])
{
(*D)[v][w]=(*D)[v][u]+(*D)[u][w];
}
}
int main()
{
MGraph g;
int i,j;
DistancMatrix d;
CreateDN(&g);
for(i=0;i<g.vexnum;i++)/*邻接矩阵对角线元素为0*/
g.arcs[i][i]=0;
ShortestPath_FLOYD(g,&d);
for(i=0;i<g.vexnum;i++)
for(j=0;j<g.vexnum;j++)
{
if(i==j)
j++;
if(j>=g.vexnum)
break;
if(d[i][j]==100000)
printf("%d->%d:No Path\n",i,j);
else
printf("%d->%d:%d\n",i,j,d[i][j]);
}
return 0;
}


  • 李树花开
  • 异能力者
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
#include <stdio.h>
#include<string.h>
#define MAX_NAME 5
typedef int VRType;/*宏定义*/
#define OK 1
#define FALSE 0
#define TRUE 1
#define INFINITY 100000
#define MAX_VERTEX_NUM 20
typedef int DistancMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
typedef struct {
int arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
int vexnum,arcnum; }MGraph;/*定义一个结构体数组,包括记录权值的邻接矩阵数组,总顶点数,以及初始的弧的数目*/
int CreateDN(MGraph *G)/*构建该结构体的函数*/
{
int i,j,k,b;
scanf("%d,%d",&(*G).vexnum,&(*G).arcnum);/*要求输入顶点数,以及弧的数目*/
for(i=0;i<(*G).vexnum;++i)
for(j=0;j<(*G).vexnum;++j)
{
(*G).arcs[i][j]=INFINITY;/*首先在邻接矩阵内置最大值即+∞,这里的+∞用一个较大的值代替*/
}
for(k=0;k<(*G).arcnum;k++)
{
scanf("%d,%d,%d",&i,&j,&b); /*输入arcnum个弧的信息,起点,终点,以及权值*/
(*G).arcs[i][j]=b;
}
return OK;
}
void ShortestPath_FLOYD(MGraph G,DistancMatrix *D)/*FLOYD算法*/
{
int u,v,w;
for(v=0;v<G.vexnum;v++)
for(w=0;w<G.vexnum;w++)
{
(*D)[v][w]=G.arcs[v][w];/*将结构体内邻接矩阵的信息记入D数组*/
}
for(u=0;u<G.vexnum;u++)/*这才是FLOYD算法的精华部分*/
for(v=0;v<G.vexnum;v++)
for(w=0;w<G.vexnum;w++)
if((*D)[v][u]+(*D)[u][w]<(*D)[v][w])
{
(*D)[v][w]=(*D)[v][u]+(*D)[u][w];
}
}
int main()
{
MGraph g;
int i,j;
DistancMatrix d;
CreateDN(&g);
for(i=0;i<g.vexnum;i++)/*邻接矩阵对角线元素为0*/
g.arcs[i][i]=0;
ShortestPath_FLOYD(g,&d);
for(i=0;i<g.vexnum;i++)
for(j=0;j<g.vexnum;j++)
{
if(i==j)
j++;
if(j>=g.vexnum)
break;
if(d[i][j]==100000)
printf("%d->%d:No Path\n",i,j);
else
printf("%d->%d:%d\n",i,j,d[i][j]);
}
return 0;
}


  • 李树花开
  • 异能力者
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我总不能等你看完再发吧


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 13回复贴,共1页
<<返回c语言吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示