日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

图结构练习——BFSDFS——判断可达性

發布時間:2024/8/23 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 图结构练习——BFSDFS——判断可达性 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目描述

?在古老的魔獸傳說中,有兩個軍團,一個叫天災,一個叫近衛。在他們所在的地域,有n個隘口,編號為1..n,某些隘口之間是有通道連接的。其中近衛軍團在1號隘口,天災軍團在n號隘口。某一天,天災軍團的領袖巫妖王決定派兵攻打近衛軍團,天災軍團的部隊如此龐大,甚至可以填江過河。但是巫妖王不想付出不必要的代價,他想知道在不修建任何通道的前提下,部隊是否可以通過隘口及其相關通道到達近衛軍團展開攻擊。由于n的值比較大(n<=1000),于是巫妖王找到了擅長編程的你 =_=,請你幫他解決這個問題,否則就把你吃掉變成他的魔法。為了拯救自己,趕緊想辦法吧。 ?

輸入

?輸入包含多組,每組格式如下。 第一行包含兩個整數n,m(分別代表n個隘口,這些隘口之間有m個通道)。 下面m行每行包含兩個整數a,b;表示從a出發有一條通道到達b隘口(注意:通道是單向的)。

輸出

?如果天災軍團可以不修建任何通道就到達1號隘口,那么輸出YES,否則輸出NO。 ?

示例輸入

2 1 1 2 2 1 2 1

示例輸出

NO YES

提示



#include <stdio.h>
#include <stdlib.h>
#include<queue>
using namespace std;
typedef struct arcnode
{
? ? int adj;
} arcnode, adjmatrix[1000][1000];
typedef struct
{
? ? adjmatrix a;
? ? int vn;
? ? int an;
} MG;
int k;//初始點
int i, j;
int create(MG &g, int n, int m)//生成鄰接矩陣;
{
? ? int v1, v2;
? ? g.vn = n;
? ? g.an = m;
? ? for(i=1; i<=g.vn; i++)
? ? ? ? for(j=1; j<=g.vn; j++)
? ? ? ? ? ? g.a[i][j].adj = 0;
? ? for(i=1; i<=g.an; i++)
? ? {
? ? ? ? scanf("%d %d", &v1, &v2);
? ? ? ? g.a[v1][v2].adj = 1;
? ? }
? ? return 1;
}


int v[1000];//標記數組
int bfs(MG &g)//廣度優先遍歷;
{
? ? queue<int>q;//放在里面 否則超時
? ? for(i=0; i<=g.vn; i++)//初始化;
? ? ? ? v[i] = 0;
? ? v[g.vn] = 1;//從尾結點遍歷;
? ? q.push(g.vn);
? ? while(!q.empty())
? ? {
? ? ? ? i = q.front();
? ? ? ? q.pop();
? ? ? ? if(i == 1)//到頂點1說明天災軍團能到達1號隘口;
? ? ? ? ? ? return 1;
? ? ? ? for(j=1; j<=g.vn; j++)
? ? ? ? {
? ? ? ? ? ? if(g.a[i][j].adj == 1 && !v[j])
? ? ? ? ? ? {
? ? ? ? ? ? ? ? v[j] = 1;
? ? ? ? ? ? ? ? q.push(j);
? ? ? ? ? ? }
? ? ? ? }
? ? }
? ? return 0;
}
int main()
{
? ? MG g;
? ? int n, m;
? ? while(~scanf("%d %d", &n, &m))//主函數里輸入 否則超時
? ? {
? ? ? ? create(g, n, m);
? ? ? ? bfs(g);
? ? ? ? if(!bfs(g))
? ? ? ? ? ? printf("NO\n");
? ? ? ? else
? ? ? ? ? ? printf("YES\n");
? ? }
? ? return 0;
}






總結

以上是生活随笔為你收集整理的图结构练习——BFSDFS——判断可达性的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。