• 判定图的两点是否有路


    问题描述

    给定一个有向图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
    ");
        }
    }
  • 相关阅读:
    在线制作流程图
    表格设计有感
    mvp需要加上单利模式
    2015.7.17( NOI2015 day1 )
    BZOJ 2073: [POI2004]PRZ( 状压dp )
    1688: [Usaco2005 Open]Disease Manangement 疾病管理( 枚举 )
    BZOJ 1072: [SCOI2007]排列perm( )
    BZOJ 1475: 方格取数( 网络流 )
    BZOJ 3524: [Poi2014]Couriers( 主席树 )
    BZOJ 1087: [SCOI2005]互不侵犯King( 状压dp )
  • 原文地址:https://www.cnblogs.com/woxiaosade/p/10057205.html
Copyright © 2020-2023  润新知