最短路径 (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;
}
目录
相关文章
|
7月前
|
机器学习/深度学习 测试技术
【图论】【状态压缩】【树】【深度优先搜索】1617. 统计子树中城市之间最大距离
【图论】【状态压缩】【树】【深度优先搜索】1617. 统计子树中城市之间最大距离
|
7月前
leetcode-6135:图中的最长环
leetcode-6135:图中的最长环
52 0
求两点间的最短距离
求两点间的最短距离
96 0
|
存储 算法 C语言
6-1 最小生成树(普里姆算法) (10分)
6-1 最小生成树(普里姆算法) (10分)
6-1 最小生成树(普里姆算法) (10分)
|
存储
L2-031 深入虎穴 (25 分)(bfs)
L2-031 深入虎穴 (25 分)(bfs)
205 0
L2-031 深入虎穴 (25 分)(bfs)
L3-008 喊山 (30 分)(bfs)
L3-008 喊山 (30 分)(bfs)
104 0
L3-008 喊山 (30 分)(bfs)
L2-026 小字辈 (25 分)(bfs)
L2-026 小字辈 (25 分)(bfs)
128 0
h0053. 求一元二次方程的根 (10 分)
h0053. 求一元二次方程的根 (10 分)
163 0
L2-013 红色警报 (25 分)(并查集)
L2-013 红色警报 (25 分)(并查集)
188 0
L2-010 排座位 (25 分)(并查集)
L2-010 排座位 (25 分)(并查集)
147 0