график — глубина первого поиска & amp; первая реализация поиска в переполнении стека

Я кодер начального уровня, и я кодирую dfs bfs, но с его повторным отображением ошибки, я назначил массив узлов, для которых я использовал указатель на указатель, однако, когда я присваиваю значения элементам каждого члена массива, это показывает ошибку . ЭТО ЕДИНСТВЕННАЯ ОШИБКА ACCORF = ОБРАЩАЙТЕСЬ ко мне, ПОМОГИТЕ!

 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;
}

-1

Решение

void initial()

{
for(int i=0; i<5; i++)
struct node *(graph[i])=(struct node*)malloc(sizeof(struct node));
}

в struct node *(graph[i])Вы получаете доступ к своей i th позиция, когда вы объявляете это. Должно быть так

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;

Также попробуйте изменить имена переменных на более значимые, чтобы другие могли их отлаживать. Также добавьте несколько комментариев в ваш код. Ваше первоначальное намерение в этом посте было удалить ошибку компиляции. И это исправлено. Теперь я предлагаю вам провести рефакторинг вашего кода и начать отладку самостоятельно.

0

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector