根据顶点边数和点信息输出邻接矩阵

简介: 根据顶点边数和点信息输出邻接矩阵
// ConsoleApplication23.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <iostream>                                     
#include<malloc.h>
using namespace std;
#define MAXVEX 100
typedef char VertexType;
typedef int EdgeType;
typedef struct
{
  VertexType vexs[MAXVEX];
  EdgeType edges[MAXVEX][MAXVEX];
  int n, e;
}MGraph;
MGraph CreateMGraph(int pd)
{
  MGraph G;
  int i, j, k, n;
  cout << "请输入顶点数和边数:";
  cin >> G.n >> G.e;
  cout << "请输入顶点信息:";
  for (i = 0; i < G.n; i++)
    cin >> G.vexs[i];
  for (i = 0; i < G.n; i++)
    for (j = 0; j < G.n; j++)
      G.edges[i][j] = 0;
  cout << "请输入每条边对应的两个顶点的序号及权重:\n";
  for (n = 0; n < G.e; n++)
  {
    cin >> i >> j >> k;
    G.edges[i][j] = k;
    if (pd == 0)
      G.edges[j][i] = k;
  }
  return G;
}
void DisplayMGraph(MGraph G, int pd)
{
  for (int i = 0; i < G.n; i++)
  {
    cout << "第" << i + 1 << "行:";
    for (int j = 0; j < G.n; j++)
      if (pd == 0 && G.edges[i][j] == 0)
        cout << "∞" << "\t";
      else
        cout << G.edges[i][j] << "\t";
    cout << "\n";
  }
}
int OutDegree(MGraph G, int i)
{
  int degree = 0;
  for (int j = 0; j < G.n; j++)
    if (G.edges[i][j] != 0)
      degree++;
  return degree;
}
int InDegree(MGraph G, int i)
{
  int degree = 0;
  for (int j = 0; j < G.n; j++)
    if (G.edges[j][i] != 0)
      degree++;
  return degree;
}
void PrintOut(MGraph G, int pd)
{
  int all;
  if (pd == 0)
    for (int i = 0; i < G.n; i++)
      cout << "第" << i << "个顶点" << G.vexs[i] << "的度是" << OutDegree(G, i) << endl;
  else
    for (int i = 0; i < G.n; i++)
    {
      cout << "第" << i << "个顶点" << G.vexs[i] << "的出度是" << OutDegree(G, i) << ",入度是" << InDegree(G, i) << endl;
      all = OutDegree(G, i) + InDegree(G, i);
      cout << "第" << i << "个顶点" << G.vexs[i] << "的度是" << all << endl;
    }
}
int main()
{
  cout << "如果是无向图,请输入0;如果是有向图,请输入1:";
  int pd;
  cin >> pd;
  if (pd != 0 && pd != 1)
  {
    cout << "输入有误,请退出重新输入0或1。";
    return 0;
  }
  MGraph G = CreateMGraph(pd);
  cout << "\n分行输出该邻接矩阵为:\n";
  DisplayMGraph(G, pd);
  PrintOut(G, pd);
  system("pause");
  return 0;
}
//   2. 使用团队资源管理器窗口连接到源代码管理
//   3. 使用输出窗口查看生成输出和其他消息
//   4. 使用错误列表窗口查看错误
//   5. 转到“项目”>“添加新项”以创建新的代码文件,或转到“项目”>“添加现有项”以将现有代码文件添加到项目
//   6. 将来,若要再次打开此项目,请转到“文件”>“打开”>“项目”并选择 .sln 文件

有问题留言

相关文章
|
5月前
|
存储
技术心得记录:图的概念和存储(邻接矩阵,邻接表)
技术心得记录:图的概念和存储(邻接矩阵,邻接表)
20 0
|
6月前
|
存储 容器
图的存储结构之打印邻接表
图的存储结构之打印邻接表
|
6月前
6366. 在网格图中访问一个格子的最少时间(dijkstra在矩阵上的运用)
6366. 在网格图中访问一个格子的最少时间(dijkstra在矩阵上的运用)
|
6月前
|
算法
算法题—顺时针打印矩阵
算法题—顺时针打印矩阵
47 0
|
6月前
|
存储 机器学习/深度学习 人工智能
无向图的邻接矩阵可用一维数组存储
无向图的邻接矩阵可用一维数组存储
229 0
|
存储
图操作之邻接矩阵与邻接表的深度优先遍历
图操作之邻接矩阵与邻接表的深度优先遍历
170 0
|
存储 机器学习/深度学习 算法
SWUST1070: 邻接矩阵存储简单路径
SWUST1070: 邻接矩阵存储简单路径
90 0
给定三个顶点的坐标使用程序计算三角形
给定三个顶点的坐标使用程序计算三角形
59 0
|
存储 算法 Java
计算图中两个顶点的所有路径,你会吗
计算图中两个顶点的所有路径,你会吗
290 0
计算图中两个顶点的所有路径,你会吗
|
算法 程序员 C语言