读书人

图的两种构造(邻接矩阵、邻接表)DFS

发布时间: 2012-11-23 00:03:43 作者: rapoo

图的两种结构(邻接矩阵、邻接表)DFS、BFS算法

#include <cstdio>#include <iostream>#include <cstring>#include <algorithm>#include <queue>using namespace std;#define MAXSIZE 20struct ArcNode{int adjvex;ArcNode *next;};struct VertexNode{ArcNode *firstedge;};class ALGraph{public:ALGraph(int vertex, int arc);~ALGraph(){;}void DFSTraverse(int v);void BFSTraverse(int v);void printALGraph();private:VertexNode adjlist[MAXSIZE];int vertexNum, arcNum;int visited[MAXSIZE];};ALGraph::ALGraph(int vertex, int arc){vertexNum = vertex;arcNum = arc;int i, j;for(int i=0; i<vertexNum; i++){adjlist[i].firstedge = NULL;visited[i] = false;}for(int k=0; k<arcNum; k++){cin>>i>>j;ArcNode *s = new ArcNode;s->adjvex = j;s->next = adjlist[i].firstedge;adjlist[i].firstedge = s;ArcNode *s1 = new ArcNode;s1->adjvex = i;s1->next = adjlist[j].firstedge;adjlist[j].firstedge = s1;}}void ALGraph::printALGraph(){for(int i=0; i<vertexNum; i++){ArcNode *current = adjlist[i].firstedge;printf("%d ", i);while(current){printf("%d ", current->adjvex);current = current->next;}printf("\n");}}void ALGraph::DFSTraverse(int v){cout<<v<<' ';visited[v] = true;for(ArcNode *p = adjlist[v].firstedge; NULL!=p; p=p->next){if(!visited[p->adjvex]) DFSTraverse(p->adjvex);}}void ALGraph::BFSTraverse(int v){queue<int> q;cout<<v<<' ';visited[v] = true;q.push(v);while(!q.empty()){v = q.front();q.pop();for(ArcNode *p = adjlist[v].firstedge;NULL!=p; p=p->next){if(!visited[p->adjvex]) {cout<<p->adjvex<<' ';visited[v] = true; q.push(p->adjvex);}}}}int main(int argc, char const *argv[]){int vertex, arc;cin>>vertex>>arc;ALGraph g(vertex, arc);g.printALGraph();g.DFSTraverse(0);g.BFSTraverse(0);return 0;}

读书人网 >编程

热点推荐