图的邻接矩阵
来源:互联网 发布:澳门mac口红专柜价格 编辑:程序博客网 时间:2024/05/16 11:14
//图的邻接矩阵/***************邻接矩阵********************************* **************/#include <vector>#include <string>#include <iostream>#include <queue>#define maxNum 50#define ini 9999using namespace std;struct graphMat{int edgeNum,vertexNum;char vertex[maxNum];int graphMatrix[maxNum][maxNum];//下标表示边,值表示权重};void buildGraphMat(graphMat & graph){cout<<"build adjacent matrix Graph"<<endl;cout<<"input vertex num and edge num :"<<ends;cin >>graph.vertexNum>>graph.edgeNum;//initialise graph matrixfor (int i=0;i<graph.vertexNum;++i)for (int j=0;j<graph.vertexNum;++j){if (i==j)graph.graphMatrix[i][j] = 0;elsegraph.graphMatrix[i][j] = ini;}//intialise vertex matrixcout<<"intialise vertex matrix :"<<endl;for (int i=0;i<graph.vertexNum;++i){cin >> graph.vertex[i];}//assignment matrixcout<<"input two vertex as a edge ,and than input a num as weight :"<<ends;int m,n,weight;for (int i=0;i<graph.edgeNum;++i){cin>>m>>n>>weight;graph.graphMatrix[m-1][n-1] = weight;graph.graphMatrix[n-1][m-1] = weight;}return ;}//邻接矩阵貌似不需要析构函数//deepth first searchvoid DFSDrive(graphMat & graph,vector<int> & visited,int pos){if(!visited[pos]){cout<<graph.vertex[pos]<<ends;visited[pos]=1;for (int i=0;i<graph.vertexNum;++i){if (!visited[i] && graph.graphMatrix[pos][i]!=ini){DFSDrive(graph,visited,i);}}}}void DFS(graphMat & graph){vector<int> visited(graph.vertexNum);cout<<"DFS of adjacent matrix :"<<endl;int start;cout<<"select a start vertex :"<<ends;cin >> start;--start;DFSDrive(graph,visited,start);cout<<endl;return ;}//breadth first searchvoid BFS(graphMat & graph){cout<<"BFS of adjacent matrix :"<<endl;cout<<"select a vertex to start :"<<ends;int start;cin >> start;--start;vector<int> visited(graph.vertexNum);queue<int> que;que.push(start);visited[start] =1;while(que.size()){int tmp = que.front();cout<<graph.vertex[tmp]<<ends;que.pop();for (int i=0;i<graph.vertexNum;++i){if (!visited[i] && graph.graphMatrix[tmp][i]!=ini){visited[i]=1;que.push(i);}}}cout<<endl;}//最小生成树----primevoid prime(graphMat & graph){cout<<"prime ---最小生成树"<<endl;cout<<"select a vertex to start :"<<ends;int start;cin >> start;--start;vector<int> dis(graph.vertexNum);vector<int> visited(graph.vertexNum);for (int i=0;i<graph.vertexNum;++i)dis[i] = graph.graphMatrix[start][i];visited[start]=1;//最小生成树的根cout<<graph.vertex[start]<<ends;for (int i=1;i<graph.vertexNum;++i){//循环寻找下一个结点---求最小值int mini = ini+1,k=0;for(int j=0;j<graph.vertexNum;++j){if (!visited[j] && dis[j]<mini){mini = dis[j];k =j;}}visited[k]=1;cout<<graph.vertex[k]<<ends;for(int j=0;j<graph.vertexNum;++j)//若需要之前结点另当别论{if (!visited[j] && dis[j] > graph.graphMatrix[k][j]){dis[j]=graph.graphMatrix[k][j];}}}cout<<endl;}//dijkstra---最短路径void dijkstra(graphMat & graph){cout<<"dijkstra--最短路径"<<endl;cout<<"input a start vertex to start:"<<ends;int start;cin >> start;--start;vector<int> visited(graph.vertexNum);vector<int> dis(graph.vertexNum);visited[start]=1;//initilise disfor (int i=0;i<graph.vertexNum;++i)dis[i] = graph.graphMatrix[start][i];for (int i=1;i<graph.vertexNum;++i)//剩下结点的最短距离{int mini = ini+1,k=0;for (int j=0;j<graph.vertexNum;++j){if (!visited[j] && dis[j]<mini){mini = dis[j];k =j;}}visited[k]=1;for (int j=0;j<graph.vertexNum;++j){if (!visited[j] && dis[j]>mini + graph.graphMatrix[k][j])dis[j] = mini +graph.graphMatrix[k][j];}}cout<<"以"<<start+1<<"为起点到各个顶点的最短为 "<<endl;for(int i=0;i<graph.vertexNum;++i)cout<<dis[i]<<ends;cout<<endl;}
0 0
- 图的存储-邻接矩阵
- 图的邻接矩阵实现
- 图的邻接矩阵表示
- 图的邻接矩阵
- 图的邻接矩阵
- 图的邻接矩阵存储
- 图的邻接矩阵建立
- 图的邻接矩阵实现
- 图的邻接矩阵表示
- 图的邻接矩阵表示
- 图的邻接矩阵
- 图的邻接矩阵实现
- 图的遍历(邻接矩阵)
- 图邻接矩阵的创建
- 图的邻接矩阵
- 图的邻接矩阵演示
- 图的表示--邻接矩阵
- 图的表示--邻接矩阵
- 图的邻接链表
- [Qt] qtcreator 中打开console
- 判断圆与三角形是否有交点
- 1.3.3 打开A20,实现32位寻址
- [经济学原理|政治部分]劳动价值理论
- 图的邻接矩阵
- <01分数规划>淬炼神体
- jsp 百度编辑器配置 整合springmvc注意细节
- java学习_IO(1)
- Web前端工程师职业学习路线图
- HDU 2689 Sort it(逆序对-BIT)
- matlab+opencv
- [Qt] QString 和 char* 转换
- Spark MLlib之机器学习(二)