数据结构(图)HD201801

把一件事做好,做简单,就是对自己最好的一份靠赏.
今天把建图的代码自己模拟了一下,是使用领接表写的,产出量太低,明天来写图的两个遍历算法吧.

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;

#define MAXVERTEXNUM 6 //图的顶点数
#define MAXARCNUM 7 //图的弧数
void createGraph();	//建立图
void deleteGraph();	//删除图,释放内存
void DFS();			   //深度优先
void BFS();			   //广度优先
void PrintGraph();	 //打印图

//边表
typedef struct ArcNode
{
	int adjvex;			  //该弧所指向的顶点的位置
	struct ArcNode *next; //指向下一条弧的指针
	ArcNode(int a)
	{
		this->adjvex = a;
	}
} ArcNode;

//顶点表
typedef struct VNode
{
	int data;
	// int num;
	ArcNode *first;
} VNode;

//领接表
typedef struct ALGraph
{
	int vexnum; //图的顶点数
	int arcnum; //图的弧数
	ALGraph(int v, int a)
	{
		this->vexnum = v;
		this->arcnum = a;
	}
} ALGraph;

//建立一个图
ALGraph G(MAXVERTEXNUM, MAXARCNUM);
//建立顶点表
VNode AdjList[MAXVERTEXNUM];

//初始化顶点表(在顶点表后面加入边表结合)
void createGraph(ALGraph &G, VNode (&AdjList)[MAXVERTEXNUM])
{
	int i;
	printf("依次输入顶点表结点");
	for (i = 0; i < G.vexnum; ++i)
	{
		//输入顶点表结点
		scanf("%d", &AdjList[i].data);
	}

	//处理边表结点
	for (i = 0; i < G.vexnum; ++i)
	{
		//依次处理每个顶点表的结点
		int n = 0;
		int input = 0;
		printf("please input node(%d)'s edge-nodes num\n", (i + 1));
		scanf("%d", &n);
		if (n == 0)
		{
			continue;
		}
		printf("please input edge-nodes one by one\n");
		scanf("%d", &input);
		n--;
		ArcNode *arc = new ArcNode(input);
		AdjList[i].first = arc;
		while (n > 0)
		{
			scanf("%d", &input);
			ArcNode *temp = new ArcNode(input);
			arc->next = temp;
			arc = arc->next;
			n--;
		}
	}
	printf("---------------------------------------------------\n");
}

void deleteGraph(ALGraph &G, VNode (&AdjList)[MAXVERTEXNUM])
{
	//这个函数很简单,删除所有结点与指针,释放内存空间即可
	for (int i = 0; i < G.vexnum; ++i)
	{
		if (AdjList[i].first)
		{
			delete[] AdjList[i].first;
		}
	}
	printf("delete OK");
}

void PrintGraph()
{
	for (int i = 0; i < G.vexnum; ++i)
	{
		printf("node(%d)'s information\n", (i + 1));
		printf("node number is %d\t", AdjList[i].data);
		printf("the edge-nodes contains\n");
		ArcNode *temp = AdjList[i].first;
		while (temp != NULL)
		{
			printf("%d", temp->adjvex);
			temp = temp->next;
		}
		printf("\n");
	}
}
int main(int argc, char const *argv[])
{
	createGraph(G, AdjList);
	PrintGraph();
	deleteGraph(G, AdjList);
	return 0;
}
全部评论

相关推荐

刚刷到字节跳动官方发的消息,确实被这波阵仗吓了一跳。在大家还在纠结今年行情是不是又“寒冬”的时候,字节直接甩出了史上规模最大的转正实习计划——ByteIntern。咱们直接看几个最硬的数,别被花里胡哨的宣传词绕晕了。首先是“量大”。全球招7000多人是什么概念?这几乎是把很多中型互联网公司的总人数都给招进来了。最关键的是,这次的资源分配非常精准:研发岗给了4800多个Offer,占比直接超过六成。说白了,字节今年还是要死磕技术,尤其是产品和AI领域,这对于咱们写代码的同学来说,绝对是今年最厚的一块肥肉。其次是大家最关心的“转正率”。官方直接白纸黑字写了:整体转正率超过50%。这意味着只要你进去了,不划水、正常干,每两个人里就有一个能直接拿校招Offer。对于2027届(2026年9月到2027年8月毕业)的同学来说,这不仅是实习,这简直就是通往大厂的快捷通道。不过,我也得泼盆冷水。坑位多,不代表门槛低。字节的实习面试出了名的爱考算法和工程实操,尤其是今年重点倾斜AI方向,如果你简历里有和AI相关的项目,优势还是有的。而且,转正率50%也意味着剩下那50%的人是陪跑的,进去之后的考核压力肯定不小。一句话总结:&nbsp;27届的兄弟们,别犹豫了。今年字节这是铁了心要抢提前批的人才,现在投递就是占坑。与其等到明年秋招去千军万马挤独木桥,不如现在进去先占个工位,把转正名额攥在手里。
喵_coding:别逗了 50%转正率 仔细想想 就是转正与不转正
字节7000实习来了,你...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务