最短路径 (30 分)

简介: 给定一个有N个顶点和E条边的无向图,顶点从0到N−1编号。请判断给定的两个顶点之间是否有路径存在。如果存在,给出最短路径长度。 这里定义顶点到自身的最短路径长度为0。 进行搜索时,假设我们总是从编号最小的顶点出发,按编号递增的顺序访问邻接点。

给定一个有N个顶点和E条边的无向图,顶点从0到N−1编号。请判断给定的两个顶点之间是否有路径存在。如果存在,给出最短路径长度。 这里定义顶点到自身的最短路径长度为0。 进行搜索时,假设我们总是从编号最小的顶点出发,按编号递增的顺序访问邻接点。

输入格式:
输入第1行给出2个整数N(0<N≤10)和E,分别是图的顶点数和边数。 随后E行,每行给出一条边的两个顶点。每行中的数字之间用1空格分隔。 最后一行给出两个顶点编号i,j(0≤i,j<N),i和j之间用空格分隔。

输出格式:
如果i和j之间存在路径,则输出"The length of the shortest path between i and j is X.",X为最短路径长度, 否则输出"There is no path between i and j."。

输入样例1:

7 6
0 1
2 3
1 4
0 2
1 3
5 6
0 3

输出样例1:

The length of the shortest path between 0 and 3 is 2.

输入样例2:

7 6
0 1
2 3
1 4
0 2
1 3
5 6
0 6

输出样例2:

There is no path between 0 and 6.
#include<bits/stdc++.h>
#define inf 999999999
using namespace std;
int G[15][15];//floyd算法 
int main()
{
    int n,e,i,j,k;
    cin>>n>>e;//输入顶点和边数 
    for(i=0;i<=n;i++)//对G初始化,这里i<=n这里必须要有等号,感觉是题目的bug 
    {
        for(j=0;j<=n;j++)
        {
            if(i==j)
            G[i][j]=0;
            else
            G[i][j]=inf;
        }
    }
    int x,y;
    for(i=0;i<e;i++)
    {
        cin>>x>>y;//输入路径 
        G[x][y]=1;
        G[y][x]=1;
    }
    cin>>x>>y;//输入需要求的两个地点 
    for(k=0;k<n;k++)//Floyd算法核心 
    {
        for(i=0;i<n;i++)
        {
            for(j=0;j<n;j++)
            {
                if(G[i][k]<inf&&G[k][j]<inf&&G[i][j]>G[i][k]+G[k][j])
                {
                    G[i][j]=G[i][k]+G[k][j];
                }
            }
        }
    }
    if(G[x][y]<inf)
    {
        printf("The length of the shortest path between %d and %d is %d.\n",x,y,G[x][y]);
    }
    else
    {
        printf("There is no path between %d and %d.\n",x,y);
    }
    return 0;
}
目录
相关文章
|
6月前
|
人工智能 BI
【每日一题Day354】LC2316统计无向图中无法互相到达点对数 | 并查集
【每日一题Day354】LC2316统计无向图中无法互相到达点对数 | 并查集
52 0
|
6月前
|
算法 测试技术 C++
【动态规划】【图论】【C++算法】1928规定时间内到达终点的最小花费
【动态规划】【图论】【C++算法】1928规定时间内到达终点的最小花费
|
1月前
论多段图的最短路径问题(我认为本质上还是暴力枚举法)
本文讨论了多段图最短路径问题的解决方法,认为本质上是使用暴力枚举法,通过逐步计算每个阶段点的最短距离来确定从起点到终点的最短路径。
35 1
论多段图的最短路径问题(我认为本质上还是暴力枚举法)
|
6月前
|
算法 前端开发
图中的最长环
图中的最长环
52 0
|
6月前
leetcode-6135:图中的最长环
leetcode-6135:图中的最长环
47 0
求两点间的最短距离
求两点间的最短距离
89 0
|
存储 算法 C语言
6-1 最小生成树(普里姆算法) (10分)
6-1 最小生成树(普里姆算法) (10分)
6-1 最小生成树(普里姆算法) (10分)
L3-008 喊山 (30 分)(bfs)
L3-008 喊山 (30 分)(bfs)
101 0
L3-008 喊山 (30 分)(bfs)
|
存储
L2-031 深入虎穴 (25 分)(bfs)
L2-031 深入虎穴 (25 分)(bfs)
203 0
L2-031 深入虎穴 (25 分)(bfs)
L2-026 小字辈 (25 分)(bfs)
L2-026 小字辈 (25 分)(bfs)
125 0