如何不使用C++标准库按指定格式输出无向加权图的邻接表
邻接表格式输出修改方案
你当前代码的问题是每匹配到一个邻接节点,就完整打印「顶点编号-->邻接节点」并换行,导致同一个顶点的邻接关系被拆分成了多行。只需要调整输出顺序和换行时机即可实现目标格式,全程不需要引入额外的C++标准库组件,符合作业要求。
修改思路
- 遍历每个顶点时,先打印当前顶点编号,不换行
- 增加标记位判断是否是当前顶点的第一个邻接节点,匹配目标格式的空格要求
- 遍历邻接节点的全程不换行,所有邻接节点打印完成后再统一插入换行符,实现一行对应一个顶点的邻接关系
完整修改后代码
#include <iostream> using namespace std; int main() { int nodes = 7; // 固定长度数组,避免可变长度数组兼容性问题,未使用任何标准库容器 int graphList[7][7]; for(int i = 0; i < nodes; i++){ for(int j = 0; j < nodes; j++){ graphList[i][j] = 0; } } int n1, n2, weight; for(int j = 0; j < 8; j++){ cin >> n1 >> n2 >> weight; graphList[n1][n2] = weight; graphList[n2][n1] = weight; } cout << "Adjacent list: \n"; for(int i = 0; i < nodes; i++){ // 先打印当前顶点编号 cout << i; // 标记是否是当前顶点的第一个邻接节点,用来匹配格式空格 int is_first = 1; for(int j = 0; j < nodes; j++){ if(graphList[i][j] != 0){ if(is_first){ // 第一个邻接节点的连接符后面带空格,前面不带 cout << "--> " << j; is_first = 0; }else{ // 后续邻接节点的连接符前后都带空格 cout << " --> " << j; } } } // 当前顶点所有邻接节点打印完成后再换行 cout << endl; } return 0; }
内容的提问来源于stack exchange,提问作者Shakil Mahmud Shanto
相关产品推荐
相关产品推荐

