求助,第三个点报错Too long on line 1
查看原帖
求助,第三个点报错Too long on line 1
1113646
creeper98楼主2024/8/12 21:13

求助大佬们,测试点三总是WA,显示Too long on line 1,和以前遇到的WA都不一样。想知道哪里有问题啊,这个报错是什么意思?谢谢

#include <bits/stdc++.h>
using namespace std;
#define vmax 100005
#define amax 1000005

//表结点的定义 
struct Node {
	int to;		//指向边的结点
	int next;	//指向下一个结点的下标
} node[amax]; 

//head记录头结点 
int head[vmax], num = 0;

//临时储存输入并进行排序
struct Edge {
	int from;
	int to;
} edge[amax]; 

//排序规则 
bool cmp(Edge x, Edge y) {
	if(x.to == y.to)
		return x.from > y.from;
	return x.to > y.to;
}

//建立邻接表
void add(int from, int to) {
	num++;
	node[num].to = to;
	node[num].next = head[from];
	head[from] = num;	//更新head的值,当再有从from连接的点,它的下一个为 num 坐标
}

void DFS(int v, bool visited[]) {
	visited[v] = true;
	printf("%d ",v);
	for(int i = head[v]; i != 0; i = node[i].next) {
		int w = node[i].to;
		if(!visited[w])
			DFS(w, visited);
	}
}

void DFSTraverse(int n, int m)		//深度优先遍历
//对图G进行深度优先搜索遍历,依次对图中的每一个顶点使用函数visit访问一次,且仅访问一次
{
	bool visited[vmax];
	for(int v = 1; v <= n; v++)
		visited[v] = false;
	for(int v = 1; v <= n; v++)
		if(!visited[v])
			DFS(v, visited);
}

struct QUEUE {
	int * elem;
	int front, length;
};

void iniQueue(QUEUE &Q)
//该函数实现初始化Q
{
	Q.front = 0;
	Q.length = 0;
}

int enQueue(QUEUE &Q, int e)
//将元素e入队Q。成功入栈返回1,否则返回0
{
	if(Q.length >= vmax)
		return 0;
	Q.elem[Q.length + Q.front] = e;
	Q.length++;
	return 1;
}

int deQueue(QUEUE &Q, int &e)
//将Q队首元素出队,赋值给e。成功出队返回1,否则返回0
{
	if(Q.length == 0)
		return 0;
	e = Q.elem[Q.front];
	Q.length--;
	Q.front = (Q.front + 1) % vmax;
	return 1;
}

void BFSTraverse(int n, int m)	//广度优先遍历
//对图G进行广度优先搜索遍历,依次对图中的每一个顶点使用函数visit访问一次,且仅访问一次
{
	bool visited[vmax];
	for(int v = 1; v <= n; v++)
		visited[v] = false;
	QUEUE Q;
	Q.elem = (int *)malloc(sizeof(int) * vmax);
	iniQueue(Q);
	for(int v = 1; v <= n; v++)
		if(!visited[v]) {
			visited[v] = true;
			printf("%d ",v);
			enQueue(Q, v);
			int u;
			while(Q.length != 0) {
				deQueue(Q, u);
				for(int i = head[u]; i != 0; i = node[i].next) {
					int w = node[i].to;
					if(!visited[w]) {
						visited[w] = true;
						printf("%d ",w);
						enQueue(Q, w);
					}
				}
			}
		}
	free(Q.elem);
}

int main() {
	int n, m;
	cin >> n >> m;
	for(int i = 0; i < m; i++)
		cin >> edge[i].from >> edge[i].to;
	//排序 
	sort(edge, edge + m, cmp);
	//创建无向图(邻接表)
	for(int i = 0; i < m; i++)
		add(edge[i].from, edge[i].to); 
		
	//测试邻接表的数据是否正确 
	/*for(int i = 1; i <= n; i++){
		cout << i << ':';
		for(int j = head[i]; j != 0; j = node[j].next){
			cout << node[j].to << ' '; 
		}
		cout << endl;
	}*/
	
	DFSTraverse(n, m);
	cout << endl;
	BFSTraverse(n, m);
	
	return 0;
}
2024/8/12 21:13
加载中...