当前位置: 代码迷 >> 综合 >> 深度优先搜索和宽度优先搜索
  详细解决方案

深度优先搜索和宽度优先搜索

热度:19   发布时间:2024-01-29 04:30:19.0

有手就行。

#include<stdio.h>
#include<stdlib.h>
#include<iostream>
#include<queue>
#include<algorithm>
using namespace std;
struct zong{char a[50];int juzhen[50][50];int n,e;
};
int vis[50];
queue<int>q;
void bfs(struct zong *s,int i)
{int j,k;printf("%c\n",s->a[i]);vis[i]=1;q.push(i);while(!q.empty()){k=q.front();q.pop();for(j=0;j<s->n;j++){if(s->juzhen[k][j]==1&&vis[j]==0){printf("%c\n",s->a[j]);vis[j]=1;q.push(j);}}}
}
int main()
{struct zong*s;int i,j,k,x,y;s=(struct zong*)malloc(sizeof(struct zong));printf("请输入顶点数和边数\n");scanf("%d%d",&s->n,&s->e);getchar();printf("请输入顶点的信息\n");for(i=0;i<s->n;i++){scanf("%c",&s->a[i]);getchar();}for(i=0;i<s->n;i++){for(j=0;j<s->n;j++){s->juzhen[i][j]=0;}}printf("请输入边的信息\n");for(i=0;i<s->e;i++){scanf("%d%d",&x,&y);s->juzhen[x][y]=1;s->juzhen[y][x]=1;}for(i=0;i<s->n;i++){vis[i]=0;}for(i=0;i<s->n;i++){if(!vis[i])bfs(s,i);}return 0;
}

 

#include<stdio.h>
#include<stdlib.h>
struct node{int x;struct node*next;
};
struct cc{char data;struct node *first;
};
struct zong{struct cc p[50];int n,e;
};
int vis[20];
void dfs(struct zong *s,int i)
{printf("%c\n",s->p[i].data);vis[i]=1;struct node *p;p=s->p[i].first;while(p){if(!vis[p->x])dfs(s,p->x);p=p->next;}
}
int main()
{struct node *t,*q;int n,e,i,x,y;printf("请输入顶点数和边数\n");scanf("%d%d",&n,&e);getchar();struct zong *s;s=(struct zong *)malloc(sizeof(struct zong));s->n=n;s->e=e;printf("请输入顶点信息\n");for(i=0;i<n;i++){scanf("%c",&s->p[i].data);s->p[i].first=NULL;getchar();}printf("请输入每条边对应的两个顶点的序号\n");for(i=0;i<e;i++){scanf("%d%d",&x,&y);t=(struct node*)malloc(sizeof(struct node));t->x=y;t->next=s->p[x].first;s->p[x].first=t;q=(struct node*)malloc(sizeof(struct node));q->x=x;q->next=s->p[y].first;s->p[y].first=q;}for(i=0;i<n;i++){vis[i]=0;}for(i=0;i<n;i++){if(!vis[i])dfs(s,i);}return 0;
}

 

  相关解决方案