求大家帮孩子看看吧,孩子调了快四个小时了,只过了一个点,孩子太难受了啊!
查看原帖
求大家帮孩子看看吧,孩子调了快四个小时了,只过了一个点,孩子太难受了啊!
608809
Mr_Kou楼主2021/11/18 16:59
#define _CRT_SECURE_NO_WARNINGS
#include<stdlib.h>
#include<stdio.h>
typedef struct edge
{
	int veradj;
	int cost;
	struct edge* link;
}edge;
typedef struct vertex
{
	int vername;
	edge* adjacent;
}vertex;
vertex head[100000];
vertex insert(vertex t, edge* item)
{
	edge* pre = t.adjacent, * p;
	if (t.adjacent == NULL) t.adjacent = item;
	else  if (t.vername<item->veradj && t.adjacent->veradj > item->veradj)
		item->link = t.adjacent, t.adjacent = item;
	else {
		p = pre->link;
		while (p != NULL)
		{
			if (pre->veradj < item->veradj && p->veradj > item->veradj)
			{
				item->link = p;
				pre->link = item;
				break;
			}
			pre = p;
			p = p->link;
		}
		if (p == NULL) pre->link = item;
	}
	return t;
}
int vis[100000];
int main()
{
	int m, n;
	scanf("%d%d", &m, &n);
	for (int i = 1; i <= m; i++)
	{
		head[i].vername = i;
		head[i].adjacent = NULL;
	}
	while (n--)
	{
		int a, b;
		scanf("%d%d", &a, &b);
		edge* temp = malloc(sizeof(edge));
		temp->veradj = b;
		temp->link = NULL;
		head[a] = insert(head[a], temp);
	}
	void bfs(vertex*, int);
	void dfs(vertex*, int);
	dfs(head, 1);
	printf("\n");
	for (int i = 1; i <= m; i++)
		vis[i] = 0;
	bfs(head, 1);
	return 0;
}
void dfs(vertex* t, int v)
{
	vis[v] = 1;
	printf("%d ", v);
	edge* p = t[v].adjacent;
	while (p != NULL)
	{
		int k = p->veradj;
		if (vis[k] == 0)
		{
			dfs(t, k);
		}
		p = p->link;
	}
}
void bfs(vertex* t, int v)
{
	int front, rear;
	front = rear = 0;
	int queue[100000];
	queue[rear++] = v;
	while (front != rear)
	{
		printf("%d ", queue[front]);
		edge* p = t[queue[front++]].adjacent;
		while (p != NULL)
		{
			int k = p->veradj;
			if (vis[k] == 0) queue[rear++] = k, vis[k] = 1;
			p = p->link;
		}
	}
2021/11/18 16:59
加载中...