邻接矩阵表示法

2023-11-10

输入

输入的第一行是两个整数,分别是图的总顶点数n和总边数e

第二行是n个空格分开的字符串,是顶点的名字,依次对应编号0~n-1。

随后有e行,每行两个空格分开的顶点名字,表示一条边的两个顶点。

具体见样例。

输出

首先输出n行,每行是第i个顶点的邻接顶点。

再输出该图的邻接矩阵。

具体见样例。

样例输入 Copy

8 9
v1 v2 v3 v4 v5 v6 v7 v8
v1 v2
v1 v3
v2 v4
v2 v5
v3 v6
v3 v7
v4 v8
v5 v8
v6 v7

样例输出 Copy

v1: v2 v3
v2: v1 v4 v5
v3: v1 v6 v7
v4: v2 v8
v5: v2 v8
v6: v3 v7
v7: v3 v6
v8: v4 v5
      v1  v2  v3  v4  v5  v6  v7  v8
  v1   0   1   1   0   0   0   0   0
  v2   1   0   0   1   1   0   0   0
  v3   1   0   0   0   0   1   1   0
  v4   0   1   0   0   0   0   0   1
  v5   0   1   0   0   0   0   0   1
  v6   0   0   1   0   0   0   1   0
  v7   0   0   1   0   0   1   0   0
  v8   0   0   0   1   1   0   0   0
//邻接矩阵表示图
#include <iostream>
#include <iomanip>
#include <cstdio>
using namespace std;

#define MVNum 100     //最大顶点数
typedef string VerTexType; //假设顶点的数据类型为字符串
typedef int ArcType;             //假设边的权值类型为整型

//------------图的邻接矩阵------------------
typedef struct {
   VerTexType vexs[MVNum];            //顶点表
   ArcType arcs[MVNum][MVNum];        //邻接矩阵
   int vexnum, arcnum;                //图的当前点数和边数
} Graph;

//得到顶点i的数据
VerTexType Vertexdata(const Graph &g, int i)
{
   return g.vexs[i];
}

int LocateVex(const Graph &g, VerTexType v)
{
   //确定点v在G中的位置
   for(int i = 0; i < g.vexnum; ++i)
      if(g.vexs[i] == v)
         return i;
   return -1;
   
}//LocateVex

int FirstAdjVex(const Graph &g, int v)
{
   //返回v的第一个邻接点编号,没有返回-1
   /****在此下面完成代码***************/
	int i,j;
	for(i=v;i<g.vexnum;i++)
	{
		for(j=0;j<g.vexnum;j++)
		{
			if(g.arcs[i][j]==1)return j;
		}
	}
	return -1;
   /***********************************/
}//FirstAdjVex

int NextAdjVex(const Graph &g, int v, int w)
{
   //返回v相对于w的下一个邻接点,没有返回-1
   /****在此下面完成代码***************/
	int i,j;
	for(j=w+1;j<g.vexnum;j++)
	{
			if(g.arcs[v][j]==1)return j;
	}
	return -1;
   /***********************************/
}//NextAdjVex

void CreateUDG(Graph &g)
{
   //采用邻接矩阵表示法,创建无向图G
   /****在此下面完成代码***************/
    int i,j,k;
    string v1,v2;
	cin>>g.vexnum>>g.arcnum;
	for(i=0;i<g.vexnum;i++)
	{
		cin>>g.vexs[i];
	}
	for(k=0;k<g.arcnum;k++)
	{
		cin>>v1>>v2;
		if(LocateVex(g, v1)||LocateVex(g, v2))
		{
			i=LocateVex(g, v1);
			j=LocateVex(g, v2);
			g.arcs[i][j]=g.arcs[j][i]=1;
		}else 
		{
			g.arcs[i][j]=g.arcs[j][i]=0;
		}
	}

   /***********************************/
}//CreateUDN

void DestroyUDG(Graph &g)
{
   //you should do this
   g.arcnum=g.vexnum=0;
}


//输出邻接矩阵
void PrintUDG(const Graph& g)
{
   int i, j;
   cout << "    ";
   for(i = 0; i < g.vexnum; i++) {
      cout << setw(4) << g.vexs[i] ;
   }
   cout << endl;
   for(i = 0; i < g.vexnum; i++) {
      cout << setw(4) << g.vexs[i];
      for(j = 0; j < g.vexnum; j++) {
         cout << setw(4) << g.arcs[i][j];
      }
      cout << endl;
   }
}

int main()
{
   Graph g;
   CreateUDG(g);
   //输出各个顶点的邻接点
   for(int i = 0; i < g.vexnum; i++) {
      cout << Vertexdata(g, i) << ":";
      for(int w = FirstAdjVex(g, i); w >= 0; w = NextAdjVex(g, i, w)) {
         cout << ' ' << Vertexdata(g, w);
      }
      cout << endl;
   }
   PrintUDG(g);
   DestroyUDG(g);
   return 0;
}//main

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

邻接矩阵表示法 的相关文章

  • 无法使用 strptime() 获取秒数

    我收到 YYYY MM DDThh mm ss S Z hh mm 这种格式的日期时间 我正在尝试使用复制该值strptime如下所示 struct tm time 0 char pEnd strptime datetime Y m dT
  • UTF8/UTF16 和 Base64 在编码方面有什么区别

    In c 我们可以使用下面的类来进行编码 System Text Encoding UTF8 System Text Encoding UTF16 System Text Encoding ASCII 为什么没有System Text En
  • fgets() 和 Ctrl+D,三次才能结束?

    I don t understand why I need press Ctrl D for three times to send the EOF In addition if I press Enter then it only too
  • 如何在我的应用程序中使用 Windows Key

    Like Windows Key E Opens a new Explorer Window And Windows Key R Displays the Run command 如何在应用程序的 KeyDown 事件中使用 Windows
  • 跨多个控件共享事件处理程序

    在我用 C 编写的 Windows 窗体应用程序中 我有一堆按钮 当用户的鼠标悬停在按钮上时 我希望按钮的边框发生变化 目前我有以下多个实例 每个按钮一个副本 private void btnStopServer MouseEnter ob
  • 使用 C# 在 WinRT 中获取可用磁盘空间

    DllImport kernel32 dll SetLastError true static extern bool GetDiskFreeSpaceEx string lpDirectoryName out ulong lpFreeBy
  • 如何针对 Nancy 中的 Active Directory 进行身份验证?

    这是一篇过时的文章 但是http msdn microsoft com en us library ff650308 aspx paght000026 step3 http msdn microsoft com en us library
  • A* 之间的差异 pA = 新 A;和 A* pA = 新 A();

    在 C 中 以下两个动态对象创建之间的确切区别是什么 A pA new A A pA new A 我做了一些测试 但似乎在这两种情况下 都调用了默认构造函数 并且仅调用了它 我正在寻找性能方面的任何差异 Thanks If A是 POD 类
  • 使用向量的 merge_sort 在少于 9 个输入的情况下效果很好

    不知何故 我使用向量实现了合并排序 问题是 它可以在少于 9 个输入的情况下正常工作 但在有 9 个或更多输入的情况下 它会执行一些我不明白的操作 如下所示 Input 5 4 3 2 1 6 5 4 3 2 1 9 8 7 6 5 4 3
  • 使用安全函数在 C 中将字符串添加到字符串

    我想将文件名复制到字符串并附加 cpt 但我无法使用安全函数 strcat s 来做到这一点 错误 字符串不是空终止的 我确实设置了 0 如何使用安全函数修复此问题 size strlen locatie size nieuw char m
  • Windows 窗体不会在调试模式下显示

    我最近升级到 VS 2012 我有一组在 VS 2010 中编码的 UI 测试 我试图在 VS 2012 中启动它们 我有一个 Windows 窗体 在开始时显示使用 AssemblyInitialize 属性运行测试 我使用此表单允许用户
  • 我的 strlcpy 版本

    海湾合作委员会 4 4 4 c89 我的程序做了很多字符串处理 我不想使用 strncpy 因为它不会终止 我不能使用 strlcpy 因为它不可移植 只是几个问题 我怎样才能让我的函数正常运行 以确保它完全安全稳定 单元测试 这对于生产来
  • 初始化变量的不同方式

    在 C 中初始化变量有多种方法 int z 3 与 int 相同z 3 Is int z z 3 same as int z z 3 您可以使用 int z z 3 Or just int z 3 Or int z 3 Or int z i
  • 可空属性与可空局部变量

    我对以下行为感到困惑Nullable types class TestClass public int value 0 TestClass test new TestClass Now Nullable GetUnderlyingType
  • 什么是 C 语言的高效工作流程? - Makefile + bash脚本

    我正在开发我的第一个项目 该项目将跨越多个 C 文件 对于我的前几个练习程序 我只是在中编写了我的代码main c并使用编译gcc main c o main 当我学习时 这对我有用 现在 我正在独自开展一个更大的项目 我想继续自己进行编译
  • 将应用程序从 Microsoft Access 迁移到 VB 或 C#.NET

    我目前正试图说服管理层需要将我们的应用程序之一移植到 NET 该应用程序已经发展成为 Access 中的一个庞然大物 SQL 后端 拥有 700 个链接表 650 个表单 子表单 130 个模块和 850 个查询 我几乎知道这样做的所有主要
  • 如何构建印度尼西亚电话号码正则表达式

    这些是一些印度尼西亚的电话号码 08xxxxxxxxx 至少包含 11 个字符长度 08xxxxxxxxxxx 始终以 08 开头 我发现这个很有用 Regex regex new Regex 08 0 9 0 9 0 9 0 9 0 9
  • 在Linux中使用C/C++获取机器序列号和CPU ID

    在Linux系统中如何获取机器序列号和CPU ID 示例代码受到高度赞赏 Here http lxr linux no linux v2 6 39 arch x86 include asm processor h L173Linux 内核似
  • Bing 地图运行时错误 Windows 8.1

    当我运行带有 Bing Map 集成的 Windows 8 1 应用程序时 出现以下错误 Windows UI Xaml Markup XamlParseException 类型的异常 发生在 DistanceApp exe 中 但未在用户
  • 如何连接字符串和常量字符?

    我需要将 hello world 放入c中 我怎样才能做到这一点 string a hello const char b world const char C string a hello const char b world a b co

随机推荐

  • 程序员如何缓解压力,保持心理健康

    说明 下面这篇文章 我觉得作者写的很好 就引用了下来 心理保健 心理保健 心理健康的标准 心理健康的标准 1 对现实的正确认识 看问题能持客观的态度 2 自知 自尊与自我接纳 能现实地评价自己 不过分地显示自己也不刻意地取悦别人 既接纳自己
  • 基于Eclipse的下一代建模工具

    基于Eclipse的下一代建模工具 孟言 CSDN的网友大家下午好 昨天世界杯结束了 今天我们就可以把精力重新投入到我们酷爱的技术上 很高兴与大家进行这一起CSDN的视频节目 我们今天很高兴请到软件建模资深的专家 一位是李纪华 他是IBM
  • qt中实现多语言功能

    qt实现多语言 引言 示例 环境 demo 使项目可以多语言 步骤一 步骤二 步骤三 方式一 方式二 步骤四 附加 引言 在做项目时 有时希望我们的程序可以在不同的国家使用 这样最好的方式是一套程序能适应于多国语言 Qt提供了这样的功能 使
  • 特征提取网络(分类)

    以下网络可通过torchvision models导入 import torchvision models as models resnet18 models resnet18 pretrained True vgg16 models vg
  • 带你用一个更好的方法注释掉一段代码

    今天分享一个好用的注释代码块的方法给大家 话不多说 我们平时常用的注释一句代码和文字就用 或者 如 char a 0 这是一个常用的注释方法 但是我们如果注释一大块内容呢 就会用到上面提到的 了 但是这个方法不适应用于代码块中存在 的情况
  • Windows获取系统、进程CPU占用率、内存、磁盘、网卡

    1 获取系统cpu 使用WindowsAPI函数GetSystemTimes 为获取当前使用率 通过执行两次的方式进行差值比较 在win7 win10上试验结果准确 具体用法参考下列代码 Windows程序获取cpu占用率 void Get
  • QT学习笔记(20) ——回调函数的使用

    目录 前言 正文 函数指针 回调函数 为何要使用回调函数 例子 总结 参考文献 前言 因为程序一直有用到这个回调函数 虽然能够大概看得懂 知道是把函数指针从一个类传到另一个类 给这另一个类用 但是 里面具体详细的内容不太明确 在这里 稍微记
  • POI导入导出Excel表格

    POI全称 PoorObfuscation Implementation 直译为 可怜的模糊实现 利用POI接口可以通过JAVA操作Microsoft office 套件工具的读写功能 官网 http poi apache org 在官网中
  • Java之基于注解的Excel导出

    数据库Excel导出操作代码过于冗长惨不忍睹 无法复用 推荐使用阿里巴巴组件 关于Easyexcel Easy Excel 目录 第一步 自定义注解 第二步 实体类 第三步 解析工具类 第四步 使用 依赖
  • 校验一个输入框必须小于另一个输入框,计算两输入框相减,并且v-model绑定值变化生效

    一 校验 rules stockOutNumber required true message 请输入出库数量 trigger blur change pattern 1 9 d message 请输入正整数 trigger blur va
  • 实用小工具 -- 在线查看别人网站流量

    1 打开链接 http www aizhan com 到达爱站网 2 输入你要查询的网站的链接 按综合查询按钮 就可以查看了 转载于 https www cnblogs com lmei p 3356881 html
  • VS2010 LNK1123: 转换到 COFF 期间失败: 文件无效或损坏 的解决方法

    因为同一个电脑上安装多个VS 有多个cvtres exe 按照下面的操作如果还是不行就在C盘搜索cvtres exe 然后挨个重命名 看看是调用的哪个 然后修改就可以了 用VS2010编译C 项目时出现这样的错误 LNK1123 转换到 C
  • vue+nodejs前后端分离模式详细使用说明

    Node js和Vue js在不同的领域有着不同的使用场景 下面是一些常见的使用场景 使用场景 1 全栈开发 Node js和Vue js可以一起用于全栈开发 即使用Node js作为后端服务器 Vue js作为前端框架 Node js可以
  • java中scanner中nextint,Java Scanner nextInt()方法

    Java Scanner nextInt 方法 java util Scanner nextInt 方法扫描输入的下一个标记为int 形式nextInt 方法的调用和调用nextInt radix 的行为方式完全相同 其中的radix是此扫
  • 为什么要使用三次握手

    首先 tcp是可靠传输协议 需要三次握手建立连接服务 三次握手的目的是 为了防止已经失效的连接请求报文段突然又传到服务端 因而产生错误 这种情况是 client端发出了一个连接请求报文 而是因为某些未知的原因在某个网络节点上发生延迟 滞留
  • 为什么springboot在控制器调用接口调用不了

    可能你只是忘记在接口加这个注解
  • (vscode)html学习记录2

    表格属性 css会提到 align left center right 靠左对齐靠右中间 border 默认为 表示没边框 数字 cellpadding 单元边缘与其内容之间的空白 cellspacing 单元与单元之间的空白 width
  • Ubuntu(20.04)安装mysql8.0

    我的ubuntu版本已是最新版 因此可以通过apt直接安装8 0的mysql 如果是18版本的ubuntu 可能apt直接安装的是5 7版本的mysql 目录 一 安装mysql服务端 二 初始化配置 一 安装mysql服务端 sudo a
  • .ui文件无法自动生成ui_**.h头文件,报错Moc‘ing QtGuiClass.h... 1> Missing value after ‘-I‘.

    VS下Qt环境都配置没问题 程序突然不能编译 ui无法生成 h文件 同时报错Moc ing QtGuiClass h 1 Missing value after I 可尝试以下方法 编辑项目文件 vcproj 将 I NOINHERIT 替
  • 邻接矩阵表示法

    输入 输入的第一行是两个整数 分别是图的总顶点数n和总边数e 第二行是n个空格分开的字符串 是顶点的名字 依次对应编号0 n 1 随后有e行 每行两个空格分开的顶点名字 表示一条边的两个顶点 具体见样例 输出 首先输出n行 每行是第i个顶点