求教 初学数据结构,不知道哪里写错了
构造表时已经排序了,但WA第一个点 MLE后面四个
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
#define datatype long long
struct edgenode
{
edgenode* next;
int no;
};
struct vertexnode
{
int no;
edgenode* head;
};
vertexnode* insert(vertexnode* list, int start, int end)
{
edgenode* temp = list[start-1].head;
edgenode* pretemp=NULL;
for(;temp;temp=temp->next)
{
if(temp->no > end)
{
if(pretemp==NULL)
{
pretemp = new edgenode;
pretemp->next = temp;
pretemp->no = end;
list[start-1].head = pretemp;
}
else
{
edgenode* newone = new edgenode;
newone->next = temp->next;
newone->no = end;
temp->next = newone;
}
return list;
}
pretemp = temp;
}
temp = new edgenode;
temp->no = end;
temp->next = NULL;
if(pretemp)
pretemp->next = temp;
else
list[start-1].head = temp;
return list;
}
void *_DFS(vertexnode* list, int startpos, int* visit)
{
if(visit[startpos-1]==0)
{
visit[startpos-1]=1;
printf("%d ",startpos);
}
for(edgenode* temp = list[startpos-1].head;temp;temp=temp->next)
{
if(visit[(temp->no)-1])
;
else
{
_DFS(list, temp->no, visit);
}
}
}
void *DFS(vertexnode* list, int startpos, int len)
{
int *visit = new int [len];
memset(visit, 0, sizeof(int)*len);
int top = startpos-1;
for(;top<len;top++)
{
if(visit[top])
continue;
_DFS(list, top+1, visit);
}
delete[] visit;
}
void *_BFS(vertexnode* list, int startpos, int* visit, int len)
{
int * linestack = new int [15000];
memset(linestack, 0, sizeof(int)*(15000));
{
int h=0,t=0;
linestack[t] = startpos;
for(;h<=t;h++)
{
if(visit[linestack[h]-1]==0)
{
visit[linestack[h]-1] = 1;
printf("%d ",list[linestack[h]-1].no);
}
for(edgenode* temp = list[linestack[h]-1].head; temp; temp=temp->next)
{
if(visit[(temp->no)-1]==0)
linestack[++t] = temp->no;
}
}
}
delete[] linestack;
}
void *BFS(vertexnode* list, int startpos, int len)
{
int *visit = new int [len];
memset(visit, 0, sizeof(int)*len);
int top = startpos-1;
for(;top<len;top++)
{
if(visit[top])
continue;
else
{
_BFS(list, top+1, visit, len);
}
}
delete[] visit;
}
int main()
{
int n,m;
scanf("%d%d",&n,&m);
vertexnode* list = new vertexnode [n];
for(int i=0;i<n;i++)
{
list[i].head = 0;
list[i].no = i+1;
}
for(int i=0;i<m;i++)
{
int start, end;
scanf("%d%d",&start, &end);
list = insert(list, start, end);
}
DFS(list, 1, n);
printf("\n");
BFS(list, 1, n);
return 0;
}