zoukankan      html  css  js  c++  java
  • 判定图的两点是否有路

    问题描述

    给定一个有向图G,以及两个顶点s和t,判定s和t是否存在一条有向路径(s->t)

    输入描述

    输入文件,包含多组数据,每个测试数据的第一行为两个整数n和m,分别表示图G的顶点数和变数,

    接下来有m行,每行为两个整数u,v,描述一条有向边<u,v>,

    最后有一行为两个整数,s,t,其中s≠t,且n<=50,且此图为简单图,其基图为连同的。

    输入文件的最后一行为0,0,表示输入结束

    输出描述

    若存在一条s到t的路,则输出yes,否则输出no

    样例输入

    7 9

    1 2

    2 3

    2 5

    2 6

    3 5

    4 3

    5 2

    5 4

    6 7

    3 6

    0 0

    样例输出

    yes

     

    这道题是校赛的一道题,自己早早的做了出来,但是一直提交不过,赛后才发现,自己在处理每组数据之前,忘记清零变量!!

    希望自己不要再犯这种错误。

    #include <stdio.h>
    #include <iostream>
    #include <stdlib.h>
    #include <stack>
    using namespace std;
    int maze[70][70];
    int visit[70];
    int n, m;
    int xx, yy;
    int flag = 0;
    void dfs() {
        stack<int>my_stack;
        my_stack.push(xx);
        while (!my_stack.empty()) {
            int t = my_stack.top();
            if (t == yy) {
                flag = 1;
                return;
            }
            my_stack.pop();
            for (int i = 1; i <= n; i++) {
                if (maze[t][i] == 1 && visit[i] == 0) {
                    visit[i] = 1;
                    my_stack.push(i);
                }
            }
        }
    }
    int main() {
    
        while (cin >> n >> m) {
            if (n == 0 && m == 0)
                break;
            flag = 0;
    
            for (int i = 1; i <= n; i++) {
                visit[i] = 0;
                for (int j = 1; j <= n; j++) {
                    maze[i][j] = 0;
                }
            }
            int i = 1;
            while (i <= m) {
                int x, y;
                cin >> x >> y;
                maze[x][y] = 1;
                i++;
            }
            cin >> xx >> yy;
            visit[xx] = 1;
            dfs();
            if (flag == 1)
                printf("yes
    ");
            else
                printf("no
    ");
        }
    }
  • 相关阅读:
    request常用的方法
    JS通过正则限制 input 输入框只能输入整数、小数(金额或者现金)
    基于云原生的秒杀系统设计思路
    html<input>输入框中各种正则表达式设置
    cursor:hand与cursor:pointer的区别介绍
    读入/输出优化
    手动扩栈,防止溢出
    快速乘(O(1))
    二分图若干性质
    康拓展开
  • 原文地址:https://www.cnblogs.com/woxiaosade/p/10057205.html
Copyright © 2011-2022 走看看