首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

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

2012-11-23 
图的两种结构(邻接矩阵、邻接表)DFS、BFS算法#include cstdio#include iostream#include cstring#incl

图的两种结构(邻接矩阵、邻接表)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;}

热点排行