采用邻接矩阵表示无向图,完成图的创建、图的深度优先遍历、图的广度优先遍历操作。其中图的顶点信息是字符型,图中顶点序号按字符顺序排列。本输入样例中所用的图如下所示:

输入描述

第一行输入两个值,第一个是图中顶点的个数,第二个是图中边的条数
第二行输入各顶点的信息,即输入每个顶点字符
第三行开始输入每条边,每条边的形式为两个顶点的序号,中间以空格隔开,输入完一条边换行

输出描述

首先输出图的顶点信息,输出完毕换行
接着输出图的邻接矩阵,假如图中有n个顶点,则输出形式为n行n列的邻接矩阵,输出完毕换行
接下来一行输出从图的第一个顶点开始进行深度优先遍历的序列,中间以空格隔开,输出完毕换行
最后一行输出从图的第一个顶点开始进行广度优先遍历的序列,中间以空格隔开,输出完毕换行

输入样例

5 7
A B C D E
0 1
0 2
0 3
1 2
1 3
2 4
3 4

输出样例

A B C D E
0 1 1 1 0
1 0 1 1 0
1 1 0 0 1
1 1 0 0 1
0 0 1 1 0
A B C E D
A B C D E

思路:避坑啊同学们,这个图不可能只有单连通的,他可能有多个连通分量,所以在遍历的时候要每个结点都要遍历一次,如果只从一个起始结点遍历的话只能通过25%的测试案例。同时注意格式问题,输出后的空行去掉才能AC,不然会显示格式错误!!!

#include<iostream>#define MAXSIZE 10using namespace std;int visited[MAXSIZE] = { 0 };class MGraph
{
public:MGraph(char a[], int n, int e);
public:void DFtraverse(int v);void BFtraverse(int v, int n);void Print_Vertex();void Print_Edge();
private:char vertex[MAXSIZE];int edge[MAXSIZE][MAXSIZE];int VertexNum, EdgeNum;
};
//构造函数
MGraph::MGraph(char a[], int n, int e)
{int i, j, k;VertexNum = n;EdgeNum = e;for (i = 0; i < VertexNum; i++)vertex[i] = a[i];for (i = 0; i < VertexNum; i++)for (j = 0; j < VertexNum; j++)edge[i][j] = 0;for (k = 0; k < EdgeNum; k++){cin >> i >> j;edge[i][j] = 1;edge[j][i] = 1;}
}//深度优先遍历(栈结构-递归)
void MGraph::DFtraverse(int v)
{cout << vertex[v] << ' ';visited[v] = 1;for (int j = 0; j < VertexNum; j++){if (edge[v][j] == 1 && visited[j] == 0)DFtraverse(j);}
}
//广度优先遍历(队列结构)
void MGraph::BFtraverse(int v, int n)
{int w, j, Q[MAXSIZE];int front = -1; int rear = -1;cout << vertex[v] << " "; visited[v] = 1;Q[++rear] = v;while (front != rear){w = Q[++front];for (j = 0; j < VertexNum; j++)if (edge[w][j] == 1 && visited[j] == 0){cout << vertex[j] << " ";visited[j] = 1;Q[++rear] = j;}}
}void MGraph::Print_Edge()
{int i, j;for (i = 0; i < VertexNum; i++)//初始化邻接矩阵{for (j = 0; j < VertexNum; j++)cout << edge[i][j] << ' ';//    cout << endl;}
}void MGraph::Print_Vertex()
{for (int i = 0; i < VertexNum; i++)cout << vertex[i] << ' ';
//  cout << endl;
}
void Init(int n)
{int i;for (i = 0; i < n; i++)visited[i] = 0;
}
int main()
{int i;int n, e;char ch[MAXSIZE];cin >> n >> e;for (i = 0; i < n; i++)cin >> ch[i];MGraph MG(ch, n, e);MG.Print_Vertex();MG.Print_Edge();for (int i = 0; i < n; i++){if (visited[i] == 0){MG.DFtraverse(i);}}//cout << endl;Init(n);for (int i = 0; i < n; i++){if (visited[i] == 0){MG.BFtraverse(i,n);}}
//  cout << endl;return 0;
}

D-OJ刷题日记:无向图的邻接矩阵表示法验证程序 题目编号:515相关推荐

  1. D-OJ刷题日记:使用邻接矩阵实现最小生成树Prim算法 题目编号:1135

    理解: [理解prim算法本质--让一棵小树逐渐长大] Prim算法:又称为加边法,即每次选择最小权值的边加入到生成树中,然后再更新权值,如此反复,保证每次最优来达到最优解. Prim算法生成树用的是 ...

  2. D-OJ刷题日记:栈的顺序存储结构与操作 题目编号:457

    请你定义一个顺序栈,可以对顺序栈进行"将某个元素入栈"."弹出栈顶元素"."取栈顶元素(不删除)"."判断栈是否为空". ...

  3. 菜菜的刷题日记 | 66.加一 Plus One

    系列索引:菜菜的刷题日记 | 被LeetCode用Python狂虐的那段日子 菜鸡的刷题之路--2022/1/7 文章目录 [题目] [我的代码] [参考代码1] [参考代码2] [参考代码3] [思 ...

  4. 一个算法笨蛋的12月leetCode刷题日记

    类似文章 一个算法笨蛋的2021年11月leetCode刷题日记 一个算法笨蛋的2021年12月leetCode刷题日记 一个算法笨蛋的2022年1月leetCode刷题日记 一个算法笨蛋的2022年 ...

  5. 各大OJ刷题平台汇总

    前言 想成为一名高级工程师,算法还是要有的,至少在入门编程和进入公司之前都是必备的.刷题也可以很好的锻炼动手能力和逻辑思维,今天就给大家介绍一些知名的在线刷题平台,都是干货哦! 力扣(leetcode ...

  6. 牛客刷题日记(2021-12-8)

    牛客刷题日记(2021-12-8) 题目: 以下哪个接口的定义是正确的?( )interface B { void print() { } ;}interface B { static void pr ...

  7. 刷题日记【第十三篇】-笔试必刷题【数根+星际密码+跳台阶扩展问题+快到碗里来】

    刷题日记[第十三篇]-笔试必刷题[数根+星际密码+跳台阶扩展问题+快到碗里来] 1.方法区在JVM中也是一个非常重要的区域,它与堆一样,是被[线程共享]的区域. 下面有关JVM内存,说法错误的是?(c ...

  8. CTFshow刷题日记-MISC-图片篇(上)基础操作和信息附加

    ctfshow 图片篇引语 大部分题目仅涉及单一知识点,但可能有多种解法: 找到flag并不困难,关键是了解每一题背后的原理: 藏在哪?为什么可以这样藏?请多考虑这两个问题: misc脑图-misc之 ...

  9. 牛客刷题日记(2021-11-24)

    牛客刷题日记(2021-11-24) 题目: 下面程序的输出是:() String x="fmn"; x.toUpperCase(); String y=x.replace('f' ...

最新文章

  1. 【MongoDB异常】Exception authenticating MongoCredential解决方法
  2. usaco Sweet Butter(迪杰斯特拉(优先队列优化),bellman_ford算法模板)
  3. 实现Java Socket 客户端服务端交互实例
  4. 关于VS项目平台的x86,x64,Any CPU以及Debug和Release
  5. JAVA线程池(ThreadPoolExecutor)源码分析
  6. leetcode C++ 链表 24. 两两交换链表中的节点 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换
  7. tablepc是什么平板电脑_54位平板电脑充电柜长什么样?安和力
  8. python类怎么实例化rnn层_Python backend.rnn方法代码示例
  9. 使用简单的5个步骤设置 Web服务器集群
  10. 伺服驱动器生产文件_直流伺服系统的组成和控制原理详解
  11. iOS 网络请求封装
  12. 网络工程师学习笔记(四)
  13. Linux netstat 命令详解
  14. 松下PLC报mewnet设备打开错误----重启电脑就好!!!
  15. KM算法--学习笔记
  16. ELK安装( Elasticsearch、Logstash、Kibana)
  17. 8086汇编语言:8086CPU寄存器的相关介绍
  18. 广义相对论 狭义相对论 双生子
  19. Cocos Creator SDK接入OPPO篇
  20. 怎么完成一个无尽的长列表

热门文章

  1. 织梦主动提交_织梦发布文章主动推送(实时)给百度的方法
  2. 中国联通和中国电信如合并要抗衡中国移动需要时间
  3. 测验六python编程题,Python编程第六章习题.py
  4. 【mysql学习】01-认识数据库
  5. 山东大学为什么火了_山东大学在985高校中处于什么水平?
  6. 一首特别适合冥想的音乐
  7. Excel如何快速删除空白行?替换部分字符?
  8. 产品经理必须要了解的26个文档
  9. 图像语义分割及常用评价指标
  10. 卸载服务器oracle数据库,完美卸载Oracle数据库