您的位置:首页 > 其它

邻接表图的建立与BFS、DFS

2016-06-16 09:42 344 查看
头文件与结构体#include <iostream>#include <queue>#include <stdlib.h>using namespace std;bool visited[30];struct EdgeNode{int dest;int weight;EdgeNode* link;};struct VertexNode{char data;EdgeNode* first;};struct ALGraph{int eNum, vNum;VertexNode* vertexList;};建立邻接表、输入定点数、边数、顶点集合、边信息(边起点、边重点、权重)void createALGraph(ALGraph* &g){char eHead, eRear;EdgeNode* pE;EdgeNode* pEInside;EdgeNode* pE2;EdgeNode* pEInside2;int i = 0;int j = 0;int vStart=-1, vEnd=-1;int w;g = new ALGraph;cout << "please input the nums of vertex:" << endl;cin >> g->vNum;cout << "please input the nums of edge:" << endl;cin >> g->eNum;g->vertexList = new VertexNode[g->vNum];cout << "please input vexter set: " << endl;for (i = 0; i < g->vNum; i++){cin >> g->vertexList[i].data;g->vertexList[i].first = NULL;}i = 0;cout << "please input edge set: " << endl;while (i<g->eNum){cin >> eHead >> eRear>>w;for (j = 0; j < g->vNum; j++)						//找到对应顶点{if (eHead == g->vertexList[j].data)vStart = j;if (eRear == g->vertexList[j].data)vEnd = j;}if (vStart == -1 || vEnd == -1)						//顶点不存在{cout << " no vertex found!" << endl;}else{pEInside = g->vertexList[vStart].first;while (pEInside != NULL&&pEInside->dest != vEnd)pEInside = pEInside->link;if (pEInside == NULL)							//边已经存在{pE = new EdgeNode;pE->dest = vEnd;pE->weight = w;pE->link = g->vertexList[vStart].first;g->vertexList[vStart].first = pE;pE = new EdgeNode;pE->dest = vStart;pE->weight = w;pE->link = g->vertexList[vEnd].first;g->vertexList[vEnd].first = pE;i++;}elsecout << "you have inputed this edge before!" << endl;}}}广度优先
void BFS(ALGraph* g){memset(visited, false, sizeof(visited));queue<int> bfsQue;EdgeNode* pE;int k=0;int i = 0;for (i = 0; i < g->vNum; i++){if (!visited[i]){cout << g->vertexList[i].data << "  ";visited[i] = true;bfsQue.push(i);while (!bfsQue.empty()){k = bfsQue.front();bfsQue.pop();pE = g->vertexList[k].first;while (pE != NULL){if (!visited[pE->dest]){cout << g->vertexList[pE->dest].data << "  ";visited[pE->dest] = true;bfsQue.push(pE->dest);}pE = pE->link;}}}}}
深度优先void DFSCore(ALGraph* g,int v){visited[v]=true;cout << g->vertexList[v].data << " ";EdgeNode* pE = g->vertexList[v].first;while (pE != NULL){if (!visited[pE->dest])DFSCore(g, pE->dest);pE = pE->link;}}void DFS(ALGraph* g){memset(visited, false, sizeof(visited));for (int i = 0; i < g->vNum; i++)if (!visited[i])DFSCore(g, i);}打印图
void PrintfALGraph(ALGraph *G){EdgeNode *p = NULL;for (int i = 0; i < G->vNum; i++)for (p = G->vertexList[i].first; p != NULL; p = p->link)cout << "(" << G->vertexList[i].data << "," \<< G->vertexList[p->dest].data << ")" << p->weight << endl;}int main(){ALGraph* G=NULL;createALGraph(G);PrintfALGraph(G);cout << "BFS: ";BFS(G);cout << endl;cout << "DFS: ";DFS(G);return 0;}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: