求助大佬们,测试点三总是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;
}