最短路径的条数

ecttx ecttx 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

题目描述:求出有n(1 < n <= 100)个结点有向图中,结点1到结点n的最短路径,以及最短路径的条数(注意有重边)

题目地址:http://acm.cs.ecnu.edu.cn/problem.php?problemid=1818

写了一个代码,一直是wa,求指点,先描述一下思路,dfs函数是用一个stack求所有的的路径,同时记录路径长度,最后进行遍历,输出总的路径条数。

代码:#include<stdio.h>
#include<string.h>
#include<stdlib.h>

int path[103][103];
int cost[103][103];

int stack[150],a=1,n,n1,x,y;
int s=0;
int min=1000000;
int ss[103]={0};
struct ANS
{
int val;
int sum;
}r[100000];


void dfs(int start)
{
int i,j;
int mul;
for(i=1;i<=n1;i++)
{

if(path[start][i]!=0&&ss[i]==0)
{
if(i==y)
{
mul=1;
for(j=0;j<a-1;j++)
{
r[s].val=r[s].val+cost[stack[j]][stack[j+1]];
mul=mul*path[stack[j]][stack[j+1]];
}
r[s].val=r[s].val+cost[stack[j]][y];
mul=mul*path[stack[j]][y];
r[s].sum=mul;

if(r[s].val<min)
{
min=r[s].val;
}
s++;
}

else
{
stack[a]=i;
ss[stack[a]]=1;
a++;
dfs(i);
a--;
ss[stack[a]]=0;
}
}
}
}

int main()
{
int n,m;
int i,j,t,val;
scanf("%d%d",&n,&m);
int v,res=0;
y=n;
n1=n;

for(i=0;i<103;i++)
{
for(j=0;j<103;j++)
path[i][j]=0;
}

for(i=0;i<103;i++)
{
for(j=0;j<103;j++)
cost[i][j]=0;
}

for(t=0;t<m;t++)
{
scanf("%d%d%d",&i,&j,&val);
path[i][j]=path[i][j]+1;
cost[i][j]=val;
}
stack[0]=1;
dfs(1);
for(v=0;v<s;v++)
{
if(r[v].val==min)
res=res+r[v].sum;
}
if(min<1000000)
{
printf("%d %d\n",min,res);
}
else
{
printf("-1 0\n");
}
return 0;



}
...全文

相关推荐

迷宫最短路径 数据结构

数据结构相关 广度优先算法 用C++编的

积跬步,积小流

求有向图最短路径条数

求解有向图的最短路径主要有Dijkstra和Floyd算法。 求最短路径的条数问题方法类似,还可以使用dfs深度遍历的方法,易于理解但效率低,出现超时的情况。 三种方法如下: 注:前两个方法关键都需要一个数组来存储最短路径条数。 ci[i][j];//记录顶点i到j的最短路径条数 (1)Floyd算法 记录每一对顶点间的最短路径和最短路径条数。 int a[maxn]

Yainng

交互网络上任意节点对的最短路径集解法 (2011年)

搜索交互网络中的最短路径是研究网络结构的重要内容,在常见的Dijkstr和Floyd算法中,只能获取一条最短路径。在交互网络上任意节点对之间的最短路径不止一条的情况下,运用Floyd算法对已知加权交互网络的最短路径进行求解,对获得最短路径后的每一个节点对,在其中插入已知交互网络中的其余所有节点,并计算此时的节点对之间的路径,通过与Floyd算法后的最短路径进行比较,筛选出构成最短路径的所有中间节点,构建路径支撑树。基于路径支撑树确定任意节点对的最短路径集,是复杂网络上搜索所有最短路径的一种新算法。

weixin_38621441

动态规划求矩阵两点最短路径

给定M*N的矩阵,其中的每个元素都是-10到10之间的整数。你的任务是从左上角(1,1)走到右下角(M,N),每一步只能够向右或者向下,并且不能够走出矩阵的范围。你所经过的方格里的数字都必须被选取,请找出一条最合适的道路,使得在路上被选取的数字之和尽可能的小。

yang6512

数模经典算法(最短路径)

利用MATLAB计算最短路径的数模的算法。

math213
评论 3
收藏 已收藏
分享
返回顶部
ecttx
C语言 70,039 成员 243,237 内容