1. 程式人生 > >判別無向圖中任意給定的2個頂點之間是否存在一條長度 為k的簡單路徑

判別無向圖中任意給定的2個頂點之間是否存在一條長度 為k的簡單路徑

判別無向圖中任意給定的2個頂點之間是否存在一條長度
為k的簡單路徑 
無向圖是沒有權值的這裡的k值代表經歷k-1個頂點
不要以為很簡單,裡面很niu的 

int visited[MAXSIZE]
//出發點為i,終點為j,長度為k 
int exist_path_len(ALGraph G,int i,int j,int k) 
{
	if(i==j&&k==0)
		return 1;
	else if(k>0)
	{
		visited[i]=1;
		for(p=G.vertices[i].firstarc;p;p=p->nextarc)
		{
			int temp=p->adjvex;
			if(!visited[temp]&&exist_path_len(temp,j,k-1))
				return 1; 
		} 
		visited[i]=0;
//這裡需要把已經訪問的點重新置為0,因為如果當前不存在長度為k
//到達j點,那麼這個點還是可以使用的,因為有可能從其他點出發
//可以到達j點並且長度為k 
	} 
	return 0;
} 


相關推薦

判別任意給定2頂點之間是否存在長度 k簡單路徑

判別無向圖中任意給定的2個頂點之間是否存在一條長度 為k的簡單路徑  無向圖是沒有權值的這裡的k值代表經歷k-1個頂點 不要以為很簡單,裡面很niu的  int visited[MAXSIZE] /

採用鄰接表儲存結構,編寫一個判別任意給定的兩頂點之間是否存在長度k簡單路徑的演算法。

問題描述:試基於圖的深度優先搜尋策略編寫一程式,判別以鄰接表儲存的有向圖中是否存在有頂點Vi到Vj頂點的路徑(i!=j)。 輸入:頂點個數,邊數。頂點,邊,要找的頂點i到j。 輸出:若存在i到j路徑,輸出Exist the path,否則輸出Not exist the path。 儲存結構:鄰接表儲存

hdu4612 隨意加入邊後使橋的數量最少 / 縮點+求樹的直徑

child iostream tracking amp min esp _id 矛盾 cstring 題意如上,含有重邊(重邊的話,倆個點就能夠構成了邊雙連通)。 先縮點成樹,在求數的直徑,最遠的連起來,剩下邊(橋)的自然最少。這裏學習了樹的直徑求法:第一次選隨意

/搜環

pan return 逆向 當我 操作 fat 連通 搜索 對比   經常遇到一類問題,提供一個圖,判斷其中是否含環。所謂的環是一條起點與終點相同的路徑(至少含有一條邊,兩個結點)。由於不帶環的連通圖和帶環的連通圖有著本質的區別,不帶環的連通圖是樹,而樹相較於一般的圖可以支

[LeetCode] 323. Number of Connected Components in an Undirected Graph 的連通區域的個數

arr from sla cnblogs AI dup each rect href Given n nodes labeled from 0 to n - 1 and a list of undirected edges (each edge is a pair of n

【bzoj21115 [Wc2011] Xor 帶全1道n經過路徑權值的最大異或和(含有環)】

這道題要求從1到n的最大xor和路徑,存在重邊,允許經過重複點、重複邊。 第一行包含兩個整數N和 M, 表示該無向圖中點的數目與邊的數目。 接下來M 行描述 M 條邊,每行三個整數Si,Ti ,Di,表示 Si 與Ti之間存在 一條權值為 Di的無向邊。 圖中可能有重邊或自環。 輸出:僅包含

12.帶權有任意兩點間的最短路徑

其實它的程式碼理解起來真的挺難的我覺得!!! 昨天看了一下午感覺晦澀難懂,還是matlab好用,直接呼叫函式就可以了!!! 不過這裡還是得跟大家介紹一下: 1.問題的理解: 像這種帶權的有向圖,每一行都表示該行標號對應列標號的有向權值,本身到本身的數值為0,沒辦法

[LeetCode] Number of Connected Components in an Undirected Graph 的連通區域的個數

Given n nodes labeled from 0 to n - 1 and a list of undirected edges (each edge is a pair of nodes), write a function to find the number of connected com

節點的迭代得到從起始節點到結束節點之間的所有路徑,並從中得到最短路徑的節點

無向無權圖中節點的迭代得到從起始節點到結束節點之間的所有路徑,並從中得到最短路徑的節點。由於是無權圖,則所有的路徑的權值可以當做是1.只需要得到所有可能路徑中包含節點最小的便是最短的路徑了。 本例子可以作為在一個連線的圖中查詢一個節點到另一個節點路徑

程式設計師面試金典: 9.4樹與 4.2給定,設計一個演算法,找出兩節點之間是否存在路徑

#include <iostream> #include <stdio.h> #include <vector> #include <queue> using namespace std; /* 問題:給定有向圖,設計一個

Prim輸出所有的最小生成樹

思路: 給出n個頂點m條邊。一棵最小生成樹中有n-1條邊,所以在m條邊中選n-1條邊判斷能否構成最小生成樹,如果能則直接輸出。 判斷是否能構成最小生成樹的條件是 當前的n-1條邊的權值的和是否是最小生成樹的權值的和(程式碼裡的ans)。 步驟: 先進行一

Tarjan演算法求解一個的割點和橋問題

基本概念 割點:Articulation Point 在無向連通圖中,刪除一個頂點v及其相連的邊後,原圖從一個連通分量變成了兩個或多個連通分量,則稱頂點v為割點,同時也稱關節點(Articulation Point)。 雙連通的圖:一個沒有關節點的連通圖稱

深度優先遍歷找出一個的環

進行深度優先遍歷的時候,當考察的點的下一個鄰接點是已經被遍歷的點,並且不是自己之前的父親節點的時候,我們就找到了一條逆向邊,因此可以判斷該無向圖中存在環路。 visited陣列記錄了節點的訪問狀態,visited[i] = 0表示節點i尚未被訪問過; visi

迪傑斯特拉演算法處理最短路徑的(dijkstra)Java實現(指定兩點,求最短距離及路徑)

其實不是原創哈,我寫不出來。       如何求圖中V0到V5的最短路徑呢?         java實現的方式如下:         第一步,根據圖來建立權值矩陣:        int[][] W = {      {  0,   1,   4,  -1,  -

找出所有的環的演算法

本文給出了一個找到無向圖中所有的環的遞迴演算法,該演算法是基於DFS(深度優先搜尋)的,大概的思路是:在深度優先搜尋無向圖的過程中,當遇到起始點的時候,會認定為出現環(在本文中只是找出了無向圖中所有的長度大於等於3的環(長度為1和2的環沒有意思),所以在深搜的過程中,當遇到

判斷頂點u與v之間是否存在長度len的簡單路徑,存在返回1不存在返回0

注:程式碼沒寫註釋為了看著清爽點,不懂的地方大家隨時留言給我,互相交流學習。 #include <stdio.h> #include <stdlib.h> #define maxsize 20 typedef struct{ int no

判斷的割點

#include #include #include #include #include using namespace std; const int maxn=1010; vector g[max

求兩頂點間的所有路徑演算法

int invexset(AdjMultiList g,int vi,EdgeNode *pe,int pk){ VertexData v; int vj; if(pe->ivex==vi) vj=pe->jvex;  else vj=pe->ivex; v=g.vertex[vj].dat

牛客練習賽14 E-的最短距離(bfs+bitset)

連結:https://www.nowcoder.com/acm/contest/82/E來源:牛客網題目描述 有一個n個點的無向圖,有m次查詢,每次查詢給出一些(xi,yi) 令dist(x,

判斷兩點間是否存在長度K路徑

false std color arch [] 要求 fin ios 通過 1 #include <iostream> 2 #include <vector> 3 #define MAXN 5 4 using namespace std;