我是一个初级编码器,我正在编码dfs bfs,但它重新显示错误,我已经分配了一个节点数组,我已经使用指针指针,但是当我为每个数组成员的元素赋值时,它显示错误。这是唯一的错误ACCORF = DING TO ME,DIND HELP !!
struct node
{
int dat;
int vstd;
struct node *nxt;
};
struct node **graph=(struct node**)malloc(5*sizeof(struct node*));
void initial()
{
for(int i=0;i<5;i++)
struct node *(graph[i])=(struct node*)malloc(sizeof(struct node));
}
struct node *head=NULL;
void visited(struct node *strt)
{
struct node *temp;
for(int i=0;i<5;i++)
{
temp=graph[i];
while(temp!=NULL)
{
if(temp->dat==strt->dat)
temp->vstd=1;
temp=temp->nxt;
}
}
}
struct node* find(struct node *gelem)
{
for(int i=0;i<5;i++)
{
if(graph[i]->dat==gelem->dat)
return(graph[i]);
}
return NULL;
}
void dfs(struct node *gelem)
{
struct node *temp;
visited(gelem);
cout<<gelem->dat<<endl;
temp=find(gelem);
while(temp!=NULL)
{
if(temp->vstd!=1)
{
dfs(temp);
}
temp=temp->nxt;
}
}
void dpthfrst()
{
struct node *temp;
for(int v=0;v<5;v++)
{
temp=graph[v];
while(temp!=NULL)
{
temp->vstd=0;
temp=temp->nxt;
}
}
for(int v=0;v<5;v++)
{
temp=graph[v];
while(temp!=NULL)
{
if(temp->vstd!=1)
dfs(temp);
temp=temp->nxt;
}
}
}
void bfs(struct node *grtemp)
{
struct node *head,*temp,*tmp2,*tmp3;
ins(head,grtemp);
do
{
temp=del(head);
visited(temp);
cout<<temp->dat<<endl;
tmp2=temp->nxt;
while(tmp2!=NULL)
{
tmp3=find(tmp2);
ins(head,tmp3);
}
}while(!isemp(head));
}
void brthfrst()
{
struct node *temp;
for(int v=0;v<5;v++)
{
temp=graph[v];
while(temp!=NULL)
{
temp->vstd=0;
temp=temp->nxt;
}
}
for(int v=0;v<5;v++)
{
temp=graph[v];
while(temp!=NULL)
{
if(temp->vstd!=1)
bfs(temp);
temp=temp->nxt;
}
}
}
void insrtnode()
{
struct node *temp;
struct node *nnode=(struct node*)malloc(sizeof(struct node));
struct node *tnode=(struct node*)malloc(sizeof(struct node));
int s,d,f1=0,f2=0;
cout<<"Insert the connection"<<endl;
cin>>s;
cin>>d;
nnode->dat=s;
nnode->nxt=NULL;
nnode->vstd=0;
tnode->dat=d;
tnode->nxt=NULL;
tnode->vstd=0;
for(int i=0;i<5;i++)
{
if(graph[i]->dat==s)
f1=1;
if(graph[i]->dat==d)
f2=1;
}
if(f1==0 && f2==0 && cnt<3)
{
for(int i=0;i<5;i++)
{
if(graph[i]==NULL)
{
graph[i]=nnode;
graph[i]->nxt=tnode;
graph[i++]=tnode;
cnt+=2;
break;
}
}
}
else if((f1==1 && f2==0 && cnt<4)||(f1==0 && f2 ==1 && cnt<4 ))
{
if(f1==1)
{
for(int i=0;i<5;i++)
{
if(graph[i]->dat==s)
{
temp=graph[i];
while(temp->nxt!=NULL)
temp=temp->nxt;
temp->nxt=tnode;
}
if(graph[i]==NULL)
{
graph[i]=tnode;
cnt++;
return;
}
}
}
if(f2==1)
{
for(int i=0;i<5;i++)
{
if(graph[i]==NULL)
{
graph[i]=nnode;
graph[i]->nxt=tnode;
cnt++;
return;
}
}
}
}
else
{
cout<<"Not a valid insertion";
return;
}
}
int main()
{
initial();
int ch;
char ans;
do
{
cout<<"1.INSERT\n 2.DFS \n 3.BFS\n";
cin>>ch;
switch(ch)
{
case 1: insrtnode();
break;
case 2:dpthfrst();
break;
case 3:brthfrst();
break;
default :cout<<"Invalid \n";
}
cout<<"Do you want to continue?(y/n)";
cin>>ans;
}
while(ans=='y'||ans=='Y');
return 0;
}
答案 0 :(得分:0)
void initial()
{
for(int i=0; i<5; i++)
struct node *(graph[i])=(struct node*)malloc(sizeof(struct node));
}
在struct node *(graph[i])
中,当您宣布该位置时,您正在访问其i
位置。应该是这样的
graph[i]=(struct node*)malloc(sizeof(struct node));
在insrtnode函数中
if(f1==0 && f2==0 && cnt<3)
{
for(int i=0;i<5;i++)
{
if(graph[i]==NULL)
{
graph[i]=nnode;
graph[i]->nxt=tnode;
graph[i++]=tnode;
cnt+=2;
break;
}
}
}
行
graph[i++]=tnode;
应该是
graph[++i]=tnode;
还尝试将变量名称更改为更有意义的名称,以便其他人可以调试。还在您的代码中添加了一些注释。你这篇文章的初衷是删除编译错误。这是固定的。现在我建议你重构代码并自己开始调试。