邻接表存储实现有向网构建

7-2 邻接表存储实现有向网构建

编程实现:以邻接表的存储方式,创建一个有向网,顶点为字符型。

输入格式:

第一行输入顶点个数和边的个数,中间用空格分开。下一行开始依次输入顶点,空格或回车分开。接着依次输入边依附的两个顶点和权值,空格分开。

输出格式:

若数据合理,则输出对应的邻接表形式,见样例,邻接点下标与权值空格分开。若顶点个数为0,则输出"error"。若顶点个数为1,边个数不合理,则输出"error"

输入样例:

在这里给出一组输入。例如:

复制代码
4 4
a b c d
a b 1
a c 1
c d 1
d a 1

输出样例:

在这里给出相应的输出。例如:

复制代码
a->2 1->1 1
b
c->3 1
d->0 1
cpp 复制代码
#include<iostream>
using  namespace std;

typedef struct AdjVNode *PtrToAdjVNode;
struct AdjVNode {//邻接点
	int AdjV;//邻接点的下标
	int quan;
	struct AdjVNode* Next;//指向下一个邻接点的指针
};

typedef struct Vnode {//顶点表头结点定义
	struct AdjVNode* FirstEdge;
	char data;//值
}AdjList[50];

typedef struct GNode *PtrToGNode;
struct GNode {
	int v;//顶点数
	int e;//边数
	AdjList G;//邻接表
};
typedef PtrToGNode LGraph;

int LocateVex(LGraph &G, char v)
{
	for (int i = 0; i < G->v; i++)
	{
		if (v == G->G[i].data) {
			return i;
		}
	}
}

int CreateGraph(LGraph G)
{
	cin >> G->v >> G->e;
	if (G->v == 0 || G->v == 1) {
		cout << "error";
		return 0;
	}
	for (int i = 0; i < G->v; i++)
	{
		cin >> G->G[i].data;
		G->G[i].FirstEdge= NULL;
	}
	for (int k = 0; k < G->e; k++)
	{
		char v1, v2;
		int quan;
		cin >> v1 >> v2 >> quan;
		int i = LocateVex(G, v1);
		int j = LocateVex(G, v2);
		PtrToAdjVNode p1 = new  AdjVNode;
		p1->AdjV = j;//p1的下标为j
		p1->Next = G->G[i].FirstEdge;//头插法
		G->G[i].FirstEdge = p1;
		G->G[i].FirstEdge->quan = quan;
	}
}

void print(LGraph G)
{
	for (int i = 0; i < G->v; i++)
	{
		cout << G->G[i].data;
		PtrToAdjVNode p2 = new  AdjVNode;
		p2 = G->G[i].FirstEdge;
		while (p2)
		{
			cout << "->" << p2->AdjV << " " << p2->quan;
			p2 = p2->Next;
		}
		cout << endl;
	}
}

int main()
{
	LGraph G =new GNode;
	CreateGraph(G);
	print(G);
	return 0;
}
相关推荐
2401_8920709814 小时前
【Linux C++ 日志系统实战】LogFile 日志文件管理核心:滚动策略、线程安全与方法全解析
linux·c++·日志系统·日志滚动
yuzhuanhei14 小时前
Visual Studio 配置C++opencv
c++·学习·visual studio
Wenweno0o14 小时前
0基础Go语言Eino框架智能体实战-chatModel
开发语言·后端·golang
小O的算法实验室14 小时前
2026年ASOC,基于深度强化学习的无人机三维复杂环境分层自适应导航规划方法,深度解析+性能实测
算法·无人机·论文复现·智能算法·智能算法改进
chenjingming66615 小时前
jmeter线程组设置以及串行和并行设置
java·开发语言·jmeter
cch891815 小时前
Python主流框架全解析
开发语言·python
不爱吃炸鸡柳15 小时前
C++ STL list 超详细解析:从接口使用到模拟实现
开发语言·c++·list
十五年专注C++开发15 小时前
RTTR: 一款MIT 协议开源的 C++ 运行时反射库
开发语言·c++·反射
Momentary_SixthSense15 小时前
设计模式之工厂模式
java·开发语言·设计模式
‎ദ്ദിᵔ.˛.ᵔ₎15 小时前
STL 栈 队列
开发语言·c++