Finding an Exit from a Maze

判断无向图中的两个点之间是否有一条路径

May 16, 2017

题目链接:pdf

这道题目给出一个无向图,一个起点,一个终点,判断从起点是否能够到达终点。 显然就是从起点开始做一次DFS就可以了。

// 2017/05/12 19:35:19

// 判断两个点是否连通。。。

#include <iostream>
#include <vector>

using namespace std;

void
dfs(vector<vector<int> > &adj, int x, int y, vector<bool> &visit)
{
  visit[x] = true;
  if (visit[y]) return;

  for (size_t i = 0; i < adj[x].size(); ++i) {
    if (!visit[adj[x][i]]) {
      dfs(adj, adj[x][i], y, visit);
    }
  }

}

int reach(vector<vector<int> > &adj, int x, int y, int n) {
  vector<bool> visit(n, false);

  dfs(adj, x, y, visit);
  
  return (visit[y] ? 1 : 0);
}

int main() {
  size_t n, m;

  cin >> n >> m;
  // while(std::cin >> n >> m) {
  vector<vector<int> > adj(n, vector<int>());
  
  for (size_t i = 0; i < m; i++) {
    int x, y;
    std::cin >> x >> y;
    adj[x - 1].push_back(y - 1);
    adj[y - 1].push_back(x - 1);
  }
  
  int x, y;
  std::cin >> x >> y;
  std::cout << reach(adj, x - 1, y - 1, n) << endl;
  // }
  return 0;
}
comments powered by Disqus