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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

大连理工大学软件学院数据结构第四章第九题

發布時間:2024/1/1 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 大连理工大学软件学院数据结构第四章第九题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
/*思想:利用拓撲排序來找圖中的環,即離散數學中的w過程,每次找到一條入度為零的邊將其以及其所關聯的邊刪除,直到刪除到環的時候再也進行不下去,此時將環中的任意一個元素開始深度優先遍歷即可。 */#include <iostream> #include <queue> using namespace std;template<class EdgeType> class Edge { public:int start,end;//邊的起始節點,終止節點EdgeType weight;//邊的權重(應該可以定義為int)Edge(){start=0;end=0;weight=0;}Edge(int st,int en,int w){start=st;end=en;weight=w;}bool operator > (Edge oneEdge){if(weight>oneEdge.weight)return true;elsereturn false;}bool operator < (Edge oneEdge){if(weight<oneEdge.weight)return true;elsereturn false;} };template<class EdgeType> class Graph {public:int vertexNum; //圖中節點個數int edgeNum; //圖中邊的個數int * Mark; //標記某節點是否被訪問Graph(int verNum){this->vertexNum=verNum;edgeNum=0;Mark=new int[vertexNum];for(int i=0;i<vertexNum;i++){Mark[i]=0; //都沒有被訪問過}}~Graph(){delete [] Mark;}//virtual Edge<EdgeType> FirstEdge(int oneVertex)=0;//virtual Edge<EdgeType> NextEdge(Edge<EdgeType> oneEdge)=0;int verticesNum(){return vertexNum;}int EdgesNum(){return edgeNum;}bool isEdge(Edge<EdgeType> oneEdge){if(oneEdge.end>=0 && oneEdge.start>=0 && oneEdge.weight>0 && oneEdge.start!=oneEdge.end)//判斷條件還不清楚{return true;}else{return false;}}int startOfVertex(Edge<EdgeType> oneEdge){return oneEdge.start;}int endOfVertex(Edge<EdgeType> oneEdge){return oneEdge.end;}EdgeType weight(Edge<EdgeType> oneEdge) //返回oneEdge的權重{return oneEdge.weight;}//virtual void setEdge(int start,int end,int weight)=0;//virtual void deleteEdge(int start,int end)=0; };template<class EdgeType> class AdjGraph : public Graph<EdgeType > {private:int ** matrix;public:AdjGraph(int verNum):Graph<EdgeType>(verNum){matrix =new int * [verNum];for(int i=0;i<verNum;i++){matrix[i]=new int [verNum];}for(int i=0;i<verNum;i++)for(int j=0;j<verNum;j++){matrix[i][j]=999;}}AdjGraph(int verNum,int ** a):Graph<EdgeType>(verNum){matrix =new int * [verNum];for(int i=0;i<verNum;i++){matrix[i]=new int [verNum];}for(int i=0;i<verNum;i++)for(int j=0;j<verNum;j++){matrix[i][j]=a[i][j];}}EdgeType getIJ(int i,int j){if(i<this->vertexNum && i>=0 && j<this->vertexNum && j>=0)return matrix[i][j];else{cout<<"鄰接矩陣越界"<<endl;return 0;}}int EdgesNum(){int edgeNum=0;for(int i=0;i<this->vertexNum;i++){for(int j=0;j<this->vertexNum;j++)if(matrix[i][j]<999)edgeNum++;}this->edgeNum=edgeNum;return edgeNum;}void disp(){cout<<endl;cout<<"此圖的領接矩陣為"<<endl;for(int i=0;i<this->vertexNum;i++){for(int j=0;j<this->vertexNum;j++){cout<<matrix[i][j]<<" ";}cout<<endl;}}~AdjGraph(){for(int i=0;i<this->vertexNum;i++){matrix[i]=new int [this->vertexNum];}delete [] matrix;}Edge<EdgeType> FirstEdge(int oneVer) //返回頂點的第一條邊{Edge<EdgeType> tem;tem.start=oneVer;for(int i=0;i<this->vertexNum;i++){if(matrix[oneVer][i]<999){tem.end=i;tem.weight=matrix[oneVer][i];return tem;//break;}}tem.weight=-1;tem.end=tem.start=0;//cout<<"沒有符合條件的邊"<<endl;return tem;}Edge<EdgeType> NextEdge(Edge<EdgeType> oneEdge)//返回與oneEdg有相同起點的下一條邊{Edge<EdgeType> tem;tem.start=oneEdge.start;for(int i=oneEdge.end+1;i<this->vertexNum;i++){if(matrix[oneEdge.start][i]<999){tem.end=i;tem.weight=matrix[oneEdge.start][i];return tem;}}tem.weight=-1;//cout<<"沒有符合條件的邊"<<endl;return tem;}void visit(int i){cout<<i<<" ";}//深度優先搜索void DFS(int i)//從i號節點開始深度優先搜索{this->Mark[i]=1;//cout<<"zhe次從這里開始深度遍歷"<<i<<endl;visit(i);for(Edge<EdgeType> e=FirstEdge(i);this->isEdge(e);e=NextEdge(e)){if(this->Mark[e.end]==0){//cout<<"下次從這里開始深度遍歷"<<e.end<<endl;DFS(e.end);}}}void DFSGraph()//對圖進行深度優先搜索{for(int i=0;i<this->vertexNum;i++)this->Mark[i]=0; //標記都未訪問for(int i=0;i<this->vertexNum;i++){if(this->Mark[i]==0){DFS(i);}}}//廣度優先搜索void BFS(int i)//從i號節點開始廣度優先搜索{queue<int> que;que.push(i);visit(i);this->Mark[i]=1;int p;while(!que.empty()){p=que.front();que.pop();this->Mark[p]=1;for(Edge<EdgeType> e=FirstEdge(p);this->isEdge(e);e=NextEdge(e)){if(this->Mark[e.end]==0){//此處要注意,在節點入隊時候就要將Mark置為已訪問,否則可能會導致同一節點多次入隊visit(e.end);this->Mark[e.end]=1;que.push(e.end);}}}}void BFSGraph()//對圖進行廣度優先搜索{for(int i=0;i<this->vertexNum;i++)this->Mark[i]=0; //標記都未訪問for(int i=0;i<this->vertexNum;i++){if(this->Mark[i]==0){BFS(i);}}cout<<endl;}};//拓撲排序,判斷圖中是否有環,并輸出一個環 template<class EdgeType> void TopuSortJudeIsExitCricle(AdjGraph<EdgeType>& G,int * SortArray)//從S出發生成最短路徑 {int n=G.verticesNum();int * inderGree= new int [n];for(int i=0;i<n;i++){G.Mark[i]=0;inderGree[i]=0;SortArray[i]=-1;}for(int i=0;i<n;i++){for(Edge<EdgeType> e = G.FirstEdge(i);G.isEdge(e);e=G.NextEdge(e)){//cout<<"e的開頭"<<e.start<<endl;//cout<<"e的結尾"<<e.end<<endl;inderGree[e.end]++;}}cout<<"inder數組"<<endl;for(int j=0;j<n;j++){cout<<inderGree[j]<<" ";}cout<<endl;for(int i=0;i<n;i++){int v;for(v=0;v<n;v++){if(inderGree[v]==0 && G.Mark[v]==0){cout<<"入度為零的點為"<<v<<endl;break;}}if(v==n){cout<<"圖中存在環"<<endl;cout<<"此時的mark數組"<<endl;for(int j=0;j<n;j++){cout<<G.Mark[j]<<" ";}cout<<endl;for(int j=0;j<n;j++){if(G.Mark[j]==0){cout<<"環從這里開始"<<j<<endl;G.DFS(j);cout<<endl;return;}}}G.Mark[v]=1;SortArray[i]=v;for(Edge<EdgeType> e = G.FirstEdge(v);G.isEdge(e);e=G.NextEdge(e)){inderGree[e.end]--;}}delete [] inderGree; }int main() {//課本p170的圖int tem[6][6]={{999, 1, 1, 1, 1, 1},{999,999,1 ,999,999,999},{999,999,999,999,1 ,999},{999,999,1 ,999,999,999},{999,999,999,1 ,999,999},{999,999,999,999,1 ,999},};int n=6;int ** a=new int *[n];for(int i=0;i<n;i++){a[i]=new int [n];}for(int i=0;i<n;i++)for(int j=0;j<n;j++){a[i][j]=tem[i][j];}AdjGraph<int> p(n,a);p.disp();cout<<"深度優先搜索"<<endl;p.DFSGraph();cout<<endl;cout<<"廣度優先搜索"<<endl;p.BFSGraph();int sortArray[n];TopuSortJudeIsExitCricle(p,sortArray);cout<<"拓撲序列為"<<endl;for(int i=0;i<n;i++){if(sortArray[i]>0)cout<<sortArray[i]<<" ";}cout<<endl;return 0; }

總結

以上是生活随笔為你收集整理的大连理工大学软件学院数据结构第四章第九题的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 99久久久久成人国产免费 | 午夜av成人 | 日韩人妻一区 | 欧美日本在线观看 | 亚洲天堂av在线免费观看 | 一区二区三区精品在线 | 日本色悠悠 | 久操国产在线 | 在线视频99| 国产精品无码免费专区午夜 | 欧洲视频一区二区三区 | 一区亚洲| 精品久久国产字幕高潮 | 国产激情片 | 一道本一区二区 | 国产h视频在线观看 | 久久人人爽人人爽人人片 | 亚洲第一黄 | 天堂久久一区 | 亚洲一区二区三区日韩 | 精品一区二区三区av | 女女同性被吸乳羞羞 | 亚洲色图在线观看 | 羞羞的网站在线观看 | 日韩精品久久久久久久的张开腿让 | 国产femdom调教7777 | 天堂一二三区 | 成人污| 久久国产情侣 | 有色影院 | av在线片| 国产一级一片免费播放 | 露胸app| 国产富婆一级全黄大片 | 国产日本在线观看 | 蜜桃av乱码一区二区三区 | 午夜之声l性8电台lx8电台 | 网址在线观看你懂的 | 九色porny自拍视频在线播放 | 玖玖在线播放 | 国产色91 | 久久福利网站 | 黄色资源在线 | 美女诱惑一区二区 | 山村大伦淫第1部分阅读小说 | 久久国产精品久久久久久电车 | 日本欧美一区二区三区不卡视频 | 久久久久国产综合av天堂 | 极品新婚夜少妇真紧 | 欧美日韩在线免费视频 | 51精品 | 在线看片中文字幕 | 香蕉视频在线播放 | 国产视频一二三四区 | 999视频| 诱夫1v1高h | 国产性―交―乱―色―情人 | 亚色视频 | 大黑人交交护士xxxxhd | 国产中文久久 | 男人天堂你懂的 | 亚洲一区二区视频在线 | 亲嘴扒胸摸屁股激烈网站 | 久久午夜鲁丝片 | 久久肉 | 成人免费aaa | 欧美日韩少妇精品 | 久月婷婷| 我爱我色成人网 | www.国产三级 | 日韩高清久久 | 男人的天堂在线观看av | xxx日本黄色 | 两性囗交做爰视频 | 99精品视频播放 | 91在线小视频 | 久久久久久久久久综合 | 一个色综合网 | 亚洲区在线| 韩国一级淫片免费看 | 成人av电影免费观看 | 黄色片久久久久 | 国外亚洲成av人片在线观看 | 久久一级免费视频 | 欧美性高潮 | 处破痛哭a√18成年片免费 | 久久久久久久综合 | 欧美日本高清视频 | 天天综合av| 日韩人妻一区二区三区 | 黄色片网站在线播放 | 免费看黄色三级三级 | 亚洲一区二区在线免费 | 欧美一级一级 | 国产成人免费在线 | av的天堂 | 日本乱偷中文字幕 | 亚洲国产高清视频 | 四虎在线视频免费观看 |