C++ 图的遍历(深度优先遍历)
来源:互联网 发布:初学者mint和ubuntu 编辑:程序博客网 时间:2024/05/19 20:23
代码主要是用基本图结构矩阵和邻接表示的图进行深度优先遍历,没什么说的,循环+递归 很简单
#include<iostream>#define MAX_VERTEX 100using namespace std;//arraystruct Side_Array{int link;int mark;};char vertex_infos[MAX_VERTEX];Side_Array matrix[MAX_VERTEX][MAX_VERTEX];void DFS_For_Array(int x,int y){for(int j=0;j<MAX_VERTEX;j++){matrix[j][x].mark=1;}if(vertex_infos[x]==0){return ;}cout<<vertex_infos[x];for(int i=y;i<MAX_VERTEX;i++){if(matrix[x][i].link==1&&matrix[x][i].mark==0){DFS_For_Array(i,0);}}}int Array_Check(){for(int i=0;i<MAX_VERTEX;i++){if(matrix[0][i].mark==0){return i;}}return -1;}//liststruct Side{ int index; int weight; Side* next;}; struct Vertex{ char data;int mark;Side* first; }; typedef Vertex AdjList[MAX_VERTEX]; struct AdjGraph {AdjList adjlist; int num_vertex; int num_side; };void DFS_For_List(AdjGraph& adjGraph,int x){if(adjGraph.adjlist[x].data==0||adjGraph.adjlist[x].mark==1){return;}cout<<adjGraph.adjlist[x].data;adjGraph.adjlist[x].mark=1;Side* p=adjGraph.adjlist[x].first;while(p!=0){DFS_For_List(adjGraph,p->index);p=p->next;}}int List_Check(AdjGraph& adjGraph){for(int i=0;i<MAX_VERTEX;i++){if(adjGraph.adjlist[i].mark==0&&adjGraph.adjlist[i].data!=0){return i;}}return -1;}int main(){//array/*for(int i=0;i<MAX_VERTEX;i++){vertex_infos[i]=0;for(int j=0;j<MAX_VERTEX;j++){matrix[i][j].link=0;matrix[i][j].mark=0;}}cout<<"input vertex and side nums:";int num_vertex;int num_side;cin>>num_vertex>>num_side;cout<<"input vertex char data:";for(int i=0;i<num_vertex;i++){cin>>vertex_infos[i];}for(int i=0;i<num_side;i++){int v1;int v2;cout<<"input two vertex:";cin>>v1>>v2;matrix[v1][v2].link=1;matrix[v2][v1].link=1;}int index=Array_Check();while(index!=-1){DFS_For_Array(index,0);index=Array_Check();}cout<<endl;*///listAdjGraph adjGraph;for(int i=0;i<MAX_VERTEX;i++){adjGraph.adjlist[i].mark=0;adjGraph.adjlist[i].data=0;adjGraph.adjlist[i].first=0;}cout<<"input vertex and side nums:";cin>>adjGraph.num_vertex>>adjGraph.num_side;cout<<"input vertex char data:";for(int i=0;i<adjGraph.num_vertex;i++){cin>>adjGraph.adjlist[i].data;}for(int i=0;i<adjGraph.num_side;i++){int v1;int v2;cout<<"input two vertex:";cin>>v1>>v2;Side* side1=new Side();side1->index=v2;Side* side2=new Side();side2->index=v1;if(adjGraph.adjlist[v1].first==0){adjGraph.adjlist[v1].first=side1;}else{Side* temp=adjGraph.adjlist[v1].first;adjGraph.adjlist[v1].first=side1;side1->next=temp;}if(adjGraph.adjlist[v2].first==0){adjGraph.adjlist[v2].first=side2;}else{Side* temp=adjGraph.adjlist[v2].first;adjGraph.adjlist[v2].first=side2;side2->next=temp;}}int index=List_Check(adjGraph);while(index!=-1){DFS_For_List(adjGraph,index);index=List_Check(adjGraph);}for(int i=0;i<adjGraph.num_vertex;i++){Side* p=adjGraph.adjlist[i].first;while(p!=0){Side* temp=p->next;delete p;p=temp;}}return 0;}
0 0
- 图的遍历(深度优先遍历)
- 图的遍历 -深度优先—C
- 数据结构 - 图的深度优先遍历(C++)
- 数据结构(C实现)------- 图的深度优先遍历
- 图:图的遍历(深度优先遍历、广度优先遍历)
- 图的遍历:深度优先遍历和广度优先遍历
- 图的遍历:深度优先遍历
- 图的遍历-深度优先遍历
- 图的遍历之深度优先遍历
- 图的遍历-深度优先遍历
- 图的深度优先遍历(DFS)
- 图的遍历(深度优先搜索)
- 图的遍历(深度优先搜索)
- 图的深度优先遍历
- 图的深度优先遍历
- 图的深度优先遍历
- 图的深度优先遍历
- 图的深度优先遍历
- eclipse +MinGW,编译gtest时出现cannot find -lpthread解决办法
- JFinal快速上手及注意事项
- 微信小程序试水
- mongoDB 安装以及在Java中的使用
- JAVA中转义字符
- C++ 图的遍历(深度优先遍历)
- Mongodb 分片 + 复制集
- 视频直播流程以及ffmpeg编解码流程
- JMeter-参数化
- 按层打印二叉树
- phpunit学习笔记2
- NYOJ 师傅又被妖怪抓走了 双向BFS
- 数据库知识点---聚合函数
- 编译原理学习笔记---FIRST和FOLLOW