国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

檢查圖是否包含環(huán)

2019-11-06 06:38:57
字體:
供稿:網(wǎng)友

我們常常用檢查一張圖中是否包含環(huán)來判斷是否可以對這張圖進(jìn)行拓?fù)渑判颉5菍τ跓o向圖,由于無向圖中每條邊都可以表示成其對應(yīng)某點(diǎn)的入邊和出邊,所以不能用拓?fù)渑判虻姆椒▉頇z查是否包含環(huán)。但是我們可以用DFS方法來進(jìn)行檢查:從某一個點(diǎn)開始進(jìn)行DFS遍歷,如果在某個點(diǎn)所連接的點(diǎn)中,包含一個已經(jīng)經(jīng)過過的且不是這個點(diǎn)的父節(jié)點(diǎn)的點(diǎn),說明有環(huán)。 代碼:

//有向圖bool checkLoop(vector<vector<int>>& graph,vector<int>& inDegree){ int n = graph.size(); vector<bool> v(n,false); //檢查點(diǎn)是否被經(jīng)過過 queue<int> vv(n,true);//入度為0的點(diǎn) vector<int> in = inDegree; for(int i = 0;i < n;++i) if(in[i] == 0) vv.push(i); while(vv.size()){ int x = vv.front(); vv.pop(); v[x] = true; for(int i = 0;i < n;++i) if(graph[x][i] == 1 && v[i] == false){ in.push(i); --in[i]; if(in[i] == 0) vv.push(i); } } for(int i = 0;i < n;++i) if(v[i] == false) return true; return false;}//無向圖bool checkLoop(vector<vector<int>> &graph){ int n = graph.size(); stack<int> v; vector<pair<bool,int>> through(n, make_pair(false,0));//bool表示有沒有through,int表示父節(jié)點(diǎn) v.push(0); while (v.size()) { int x = v.top(); v.pop(); if (through[x].first)continue; through[x].first = true; for (int i = 0; i < n; ++i) { if (graph[x][i] == 1) { if (through[i].first && through[i].second != i) return true; else if (!through[i].first) { v.push(i); through[i] = make_pair(false, x); } } } for (int i = 0; i < n; ++i) if (!through[i].first) return true; return false; }}
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 稻城县| 东乡族自治县| 和硕县| 左云县| 新泰市| 庆安县| 铁力市| 石渠县| 奉节县| 鄂托克旗| 乐至县| 大洼县| 齐齐哈尔市| 华坪县| 眉山市| 星子县| 平湖市| 县级市| 柳林县| 台北县| 应城市| 陈巴尔虎旗| 文化| 乐业县| 孟连| 溧水县| 柳州市| 根河市| 霸州市| 阳高县| 隆尧县| 莫力| 大厂| 锦州市| 文水县| 禹城市| 海安县| 清远市| 白朗县| 洛川县| 彭水|