zoukankan      html  css  js  c++  java
  • 数据结构--图的建立和遍历

    有向图邻接矩阵、无向图邻接矩阵
    #include<iostream>
    using namespace std;
    #define MaxInt 32767
    #define MVNum 100
    bool visited[MVNum];
    typedef struct
    {
    	char vexs[MVNum];
    	int arcs[MVNum][MVNum];
    	int vexnum, arcnum;
    }AMGraph;
    typedef struct ArcNode
    {
    	int adjvex;
    	struct ArcNode *nextarc;
    	//OtherInfo info;
    }ArcNode;
    typedef struct VNode
    {
    	int data;
    	ArcNode *firstarc;
    }VNode, AdjList[MVNum];
    typedef struct
    {
    	AdjList vertices;
    	int vexnum, arcnum;
    }ALGraph;
    
    int LocateVex(AMGraph &G, char v)
    {
    	int n;
    	for (int i = 0; i<G.vexnum; i++)
    	if (G.vexs[i] == v)
    		n = i;
    	return n;
    }
    int LocateVex(ALGraph &G, int v)
    {
    	int n = 0;
    	for (int i = 0; i<G.vexnum; i++)
    	if (G.vertices[i].data == v)
    		n = i;
    	return n;
    }
    //邻接矩阵创建无向图和有向图
    int CreateWXT(AMGraph &G)
    {
    	char v1, v2;
    	int w, i, j;
    	cout<<"无向图邻接矩阵的建立"<<endl; 
    	cout << "请输入顶点数和边数:";
    	cin >> G.vexnum;
    	cin >> G.arcnum;
    	for (i = 0; i<G.vexnum; i++)
    	{
    		cout << "请输入顶点V" << (i + 1) << "的序号:";
    		cin >> G.vexs[i];
    	}
    	for (i = 0; i<G.vexnum; i++)
    	for (j = 0; j<G.vexnum; j++)
    		G.arcs[i][j] = 0;
    	for (int k = 0; k<G.arcnum; k++)
    	{
    		cout << "请输入两点之间的权值:例如1 2 10   ";
    		cin >> v1;
    		cin >> v2;
    		cin >> w;
    		i = LocateVex(G, v1); j = LocateVex(G, v2);
    		G.arcs[i][j] = w;
    		G.arcs[j][i] = G.arcs[i][j];
    	}
    	cout << "无向图的邻接矩阵为:" << endl;
    	for (i = 0; i<G.vexnum; i++)
    	{
    		for (j = 0; j<G.vexnum; j++)
    			cout << G.arcs[i][j] << "	";
    		cout << endl;
    	}
    	return 1;
    }
    int CreateYXT(AMGraph &G)
    {
    	char v1, v2;
    	int w, i, j;
    	cout << "有向图邻接矩阵的建立:"<<endl;
    	cout << "请输入顶点数和边数:";
    	cin >> G.vexnum;
    	cin >> G.arcnum;
    	for (i = 0; i<G.vexnum; i++)
    	{
    		cout << "请输入顶点V" << (i + 1) << "的序号:";;
    		cin >> G.vexs[i];
    	}
    	for (i = 0; i<G.vexnum; i++)
    	for (j = 0; j<G.vexnum; j++)
    		G.arcs[i][j] = MaxInt;
    	for (int k = 0; k<G.arcnum; k++)
    	{
    		cout << "请输入两个顶点值以及两点之间的权值:";
    		cin >> v1;
    		cin >> v2;
    		cin >> w;
    		i = LocateVex(G, v1); j = LocateVex(G, v2);
    		G.arcs[i][j] = w;
    	}
    	cout << "有向图的邻接矩阵为:" << endl;
    	for (i = 0; i<G.vexnum; i++)
    	{
    		for (j = 0; j<G.vexnum; j++)
    		{
    			if (G.arcs[i][j] != MaxInt)
    				cout << G.arcs[i][j] << "	";
    			else
    				cout << "∞" << "	";
    		}
    		cout << endl;
    	}
    	return 1;
    }
    
    int main()
    {
    	AMGraph G1, G2;
    	CreateWXT(G1);
    	CreateYXT(G2);
    }
    

      

  • 相关阅读:
    SAS学习笔记38 SAS Comments注释语句
    SAS学习笔记37 宏程序中parmbuff选项
    SAS学习笔记36 二分类logistic回归
    SAS学习笔记34 指针控制
    SAS学习笔记33 格式修饰符
    SAS学习笔记31 SAS随机分组方法及实现
    angular的websocket使用
    angularjs 使用ui.router 去掉url中的#号
    angular全局确认框confirm
    angular 请求$http载入画面Loading
  • 原文地址:https://www.cnblogs.com/jz-no-bug/p/14229929.html
Copyright © 2011-2022 走看看