最短路径 (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月前
1030 完美数列 (25 分)
1030 完美数列 (25 分)
|
算法 定位技术
最短路径之Folyd算法
最短路径之Folyd算法
最短路径之Folyd算法
|
存储 算法 C语言
6-1 最小生成树(普里姆算法) (10分)
6-1 最小生成树(普里姆算法) (10分)
6-1 最小生成树(普里姆算法) (10分)
|
算法
Dijkstra算法最小堆优化
Dijkstra算法最小堆优化
154 0
Dijkstra算法最小堆优化
L3-008 喊山 (30 分)(bfs)
L3-008 喊山 (30 分)(bfs)
107 0
L3-008 喊山 (30 分)(bfs)
|
存储
L2-031 深入虎穴 (25 分)(bfs)
L2-031 深入虎穴 (25 分)(bfs)
215 0
L2-031 深入虎穴 (25 分)(bfs)
|
存储 算法 C++
C++实现图 - 04 最短路径
今天我们来看看图论中另一个非常重要的问题 —— 最短路径,正如其名就是要再图中找到起点到终点的最短路径,这就需要不断地去比较每条边的权值。这一讲我们将会具体介绍迪杰斯特拉算法和弗洛伊德算法的实现。
369 0
C++实现图 - 04 最短路径
L2-026 小字辈 (25 分)(bfs)
L2-026 小字辈 (25 分)(bfs)
136 0
L2-013 红色警报 (25 分)(并查集)
L2-013 红色警报 (25 分)(并查集)
196 0
L2-010 排座位 (25 分)(并查集)
L2-010 排座位 (25 分)(并查集)
155 0