Java由淺入深帶你掌握圖的遍歷_第1頁
Java由淺入深帶你掌握圖的遍歷_第2頁
Java由淺入深帶你掌握圖的遍歷_第3頁
Java由淺入深帶你掌握圖的遍歷_第4頁
Java由淺入深帶你掌握圖的遍歷_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第Java由淺入深帶你掌握圖的遍歷目錄1.圖的遍歷2.深度優(yōu)先遍歷3.利用DFS判斷有向圖是否存在環(huán)4.廣度優(yōu)先遍歷

1.圖的遍歷

從圖中某一頂點出發(fā)訪問圖中其余頂點,且每個頂點僅被訪問一次

圖的遍歷有兩種深度優(yōu)先遍歷DFS、廣度優(yōu)先遍歷BFS

2.深度優(yōu)先遍歷

深度優(yōu)先遍歷以深度為優(yōu)先進(jìn)行遍歷,簡單來說就是每次走到底。類似于二叉樹的前序遍歷

思路:

1.以某一個頂點為起點進(jìn)行深度優(yōu)先遍歷,并標(biāo)記該頂點已訪問

2.以該頂點為起點選取任意一條路徑一直遍歷到底,并標(biāo)記訪問過的頂點

3.第2步遍歷到底后回退到上一個頂點,重復(fù)第2步

4.遍歷所有頂點結(jié)束

根據(jù)遍歷思路可知,這是一個遞歸的過程,其實DFS與回溯基本相同。

遍歷:

以此圖為例進(jìn)行深度優(yōu)先遍歷

staticvoiddfs(int[][]graph,intidx,boolean[]visit){

intlen=graph.length;

//訪問過

if(visit[idx])return;

//訪問該頂點

System.out.println("V"+idx);

//標(biāo)志頂點

visit[idx]=true;

for(inti=1;ilen;i++){

//訪問該頂點相連的所有邊

if(graph[idx][i]==1){

//遞歸進(jìn)行dfs遍歷

dfs(graph,i,visit);

}

遍歷結(jié)果:

V1

V2

V3

V4

V5

V6

V7

V8

V9

創(chuàng)建圖的代碼:

publicstaticvoidmain(String[]args){

Scannerscanner=newScanner(System.in);

//頂點數(shù)以1開始

intn=scanner.nextInt();

int[][]graph=newint[n+1][n+1];

//邊數(shù)

intm=scanner.nextInt();

for(inti=1;ii++){

intv1=scanner.nextInt();

intv2=scanner.nextInt();

graph[v1][v2]=1;

graph[v2][v1]=1;

//標(biāo)記數(shù)組false表示未訪問過

boolean[]visit=newboolean[n+1];

dfs(graph,1,visit);

}

3.利用DFS判斷有向圖是否存在環(huán)

思路:遍歷某一個頂點時,如果除了上一個頂點之外,還存在其他相連頂點被訪問過,則必然存在環(huán)

//默認(rèn)無環(huán)

staticbooleanflag=false;

publicstaticvoidmain(String[]args){

Scannerscanner=newScanner(System.in);

//頂點數(shù)以1開始

intn=scanner.nextInt();

int[][]graph=newint[n+1][n+1];

//邊數(shù)

intm=scanner.nextInt();

for(inti=1;ii++){

intv1=scanner.nextInt();

intv2=scanner.nextInt();

graph[v1][v2]=1;

//標(biāo)記數(shù)組true為訪問過

boolean[]visit=newboolean[n+1];

dfs(graph,1,visit,1);

if(flag)

System.out.println("有環(huán)");

staticvoiddfs(int[][]graph,intidx,boolean[]visit,intparent){

intlen=graph.length;

System.out.println("V"+idx);

//標(biāo)記頂點

visit[idx]=true;

for(inti=1;ilen;i++){

//訪問該頂點相連的所有邊

if(graph[

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論