• Sicily shortest path in unweighted graph


    题目介绍:

    输入一个无向图,指定一个顶点s开始bfs遍历,求出s到图中每个点的最短距离。

    如果不存在s到t的路径,则记s到t的距离为-1。
     
    Input

    输入的第一行包含两个整数n和m,n是图的顶点数,m是边数。1<=n<=1000,0<=m<=10000。

    以下m行,每行是一个数对v y,表示存在边(v,y)。顶点编号从1开始。 
     
    Output

    记s=1,在一行中依次输出:顶点1到s的最短距离,顶点2到s的最短距离,...,顶点n到s的最短距离。

    每项输出之后加一个空格,包括最后一项。
     
    Sample Input
    5 3
    1 2
    1 3
    2 4
    
    Sample Output
    0 1 1 2 -1 

    思路:

         利用广度搜索,标记层数,依次计算距离即可。

         具体代码如下:

     1 #include <iostream>
     2 #include <queue>
     3 using namespace std;
     4 
     5 bool path[1001][1001];
     6 int shortest[1001];
     7 
     8 int main() {
     9     int n, m;
    10     cin >> n >> m;
    11     
    12     for (int i = 1; i <= m; i++) {
    13         int node1, node2;
    14         cin >> node1 >> node2;
    15         path[node1][node2] = true;
    16         path[node2][node1] = true;
    17     }
    18     
    19     for (int i = 1; i <= n; i++)
    20         i == 1 ? shortest[i] = 0 : shortest[i] = -1;
    21     
    22     int distance = 0;
    23     queue<int> store;
    24     store.push(1);
    25     while (!store.empty()) {
    26         int size = store.size();
    27         distance++;
    28         while (size--) {
    29             for (int i = 1; i <= n; i++) {
    30                 if (path[store.front()][i] && shortest[i] == -1) {
    31                     shortest[i] = distance;
    32                     store.push(i);
    33                 }
    34             }
    35             store.pop();
    36         }
    37     }
    38     
    39     for (int i = 1; i <= n; i++)
    40         cout << shortest[i] << " ";
    41     cout << endl;
    42     
    43     return 0;
    44 }
  • 相关阅读:
    Day3-B-Round Marriage CodeForces-981F
    Day3-A-Problem H. Monster Hunter HDU6326
    Day3-G
    Day3-I-Squares POJ2002
    Day3-M-Cable master POJ1064
    Day3-N
    Day3-O-Median POJ3579
    Day3-P
    Day3-L-Cup HDU2289
    LeetCode "Majority Element"
  • 原文地址:https://www.cnblogs.com/winray/p/4152438.html
Copyright © 2020-2023  润新知