最短路计数

最短路计数

提交数: 51, 通过率: 54.9%, 平均分: 65.49

题目描述:

给出一个N个顶点M条边的无向无权图,顶点编号为1~N。问从顶点1开始,到其他每个点的最短路有几条?

输入格式:

第一行包含2个正整数N, M, 分别为图的顶点数与边数。

接下来M行,每行两个正整数x, y,表示有一条从顶点x连向点y的边。请注意可能有自环与重边。

输出格式:

共N行,每行一个非负整数,第i行输出从顶点1到顶点i有多少条不同的最短路,由于结果的值有可能会很大,你只需要输出结果 mod 100003即可。如果无法到达顶点i,则输出0。

数据范围:

对于20%的数据,N<=100。

对于60%的数据,N<=1000。

对于100%的数据,N<=100,000, M<=200,000。

样例输入:
复制代码
5 7
1 2
1 3
2 4
3 4
2 3
4 5
4 5
样例输出:
复制代码
1
1
1
2
4
提示:

样例解释:

1到5的最短路有4条,分别为2条1-2-4-5和2条1-3-4-5 ( 由于4-5的边有2条)。

此题使用SPFA(Shortest Path Faster Algorithm)

#include <bits/stdc++.h>

using namespace std;

int n,m,f[1000005],t[4000005],n1[4000005],g,dis[1000005],ans[1000005];

bool book[1000005];

queue<int> que;

void SPFA(int u,int v) {

t[g]=v,n1[g]=f[u],f[u]=g++;

}

int dfs(int u) {

if(ans[u])return ans[u];//如果ans[u]!=0直接输出,否则更新并输出

for(int i=f[u]; i!=-1; i=n1[i])

if(dis[u]-1==dis[t[i]])ans[u]=(ans[u]+dfs(t[i]))%100003;//统计最短路的条数并更新

return ans[u];

}

int main() {

scanf("%d%d",&n,&m);

for(int i=1; i<=n; i++)f[i]=-1,dis[i]=INT_MAX;//将数组初始化

for(int i=1,u,v; i<=m; i++)scanf("%d%d",&u,&v),SPFA(u,v),SPFA(v,u);//输入之后构建邻接矩阵

dis[1]=0,que.push(1),book[1]=1;

while(!que.empty()) {//循环寻找最短路

int f1=que.front();//更新出发点

que.pop(),book[f1]=0;//删除已遍历的元素

for(int i=f[f1]; i!=-1; i=n1[i])//遍历出发的边

if(dis[f1]+1<dis[t[i]]) {//如果比之前的最短路短

dis[t[i]]=dis[f1]+1;//更新最短路

if(!book[t[i]])que.push(t[i]),book[t[i]]=1;//标记已遍历过的节点和边

}

}

ans[1]=1;

for(int i=1; i<=n; i++)printf("%d\n",dfs(i));//输出最短路的个数

return 0;

}

相关推荐
kitesxian7 分钟前
Leetcode448. 找到所有数组中消失的数字(HOT100)+Leetcode139. 单词拆分(HOT100)
数据结构·算法·leetcode
VertexGeek1 小时前
Rust学习(八):异常处理和宏编程:
学习·算法·rust
石小石Orz1 小时前
Three.js + AI:AI 算法生成 3D 萤火虫飞舞效果~
javascript·人工智能·算法
jiao_mrswang2 小时前
leetcode-18-四数之和
算法·leetcode·职场和发展
qystca2 小时前
洛谷 B3637 最长上升子序列 C语言 记忆化搜索->‘正序‘dp
c语言·开发语言·算法
薯条不要番茄酱2 小时前
数据结构-8.Java. 七大排序算法(中篇)
java·开发语言·数据结构·后端·算法·排序算法·intellij-idea
今天吃饺子2 小时前
2024年SCI一区最新改进优化算法——四参数自适应生长优化器,MATLAB代码免费获取...
开发语言·算法·matlab
是阿建吖!2 小时前
【优选算法】二分查找
c++·算法
王燕龙(大卫)2 小时前
leetcode 数组中第k个最大元素
算法·leetcode
不去幼儿园3 小时前
【MARL】深入理解多智能体近端策略优化(MAPPO)算法与调参
人工智能·python·算法·机器学习·强化学习