网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
08月11日漏签0天
数据结构吧 关注:104,516贴子:883,622
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 0回复贴,共1页
<<返回数据结构吧
>0< 加载中...

大佬改改代码,无向图,广度优先搜索,用的数组代替队列,谢谢。

  • 只看楼主
  • 收藏

  • 回复
  • 阿离中路摸鱼
  • 单链表
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
#include<stdlib.h>
#include<stdio.h>
#include<malloc.h>
#define max 32727 //定义无穷大
#define N 20 //最大顶点数
//邻接矩阵的图结构
typedef struct
{
int data[N];//定义顶点表
int side[N][N];//定义邻接矩阵
int vexnum,arcnum;//图当前的顶点数和弧数
}graph;
//求邻接表位置
int LocatedVex(graph *g,int v)
{
for(int i=0;i<g->vexnum;++i)
{
if(v==g->data[i]) return i;
}
}
//构建邻接矩阵
void creatUDN(graph *g)
{
printf("请输入图当前的顶点数和弧数(中间以逗号隔开):");
scanf("%d,%d",&g->vexnum,&g->arcnum);
printf("\n");
//构造顶点表
for(int i=0;i<g->vexnum;++i)
{
printf("请输入第%d个顶点元素:",i+1);
scanf("%d",&g->data[i]);
printf("\n");
}
//初始化邻接矩阵
for(int i=0;i<g->vexnum;++i)
{
for(int j=0;j<g->vexnum;++j)
{
g->side[i][j]=0;
}
}
//构建邻接矩阵
for(int k=0;k<g->arcnum;++k)
{
int i,j,v1,v2;
printf("请输入具有关系的两个顶点的元素值(无需重复,中间以逗号隔开):");
scanf("%d,%d",&v1,&v2);
printf("\n");
i=LocatedVex(g,v1);
j=LocatedVex(g,v2);
g->side[i][j]=1;
g->side[j][i]=g->side[i][j];
}
}
void print(graph *g)
{
for(int i=0;i<g->vexnum;i++)
{
for(int j=0;j<g->vexnum;j++) printf("%3d",g->side[i][j]);
printf("\n");
}
}
int visited[N]; //定义辅助数组--全局变量
//初始化辅助数组
void initvisited()
{
for(int i=0;i<N;i++) visited[i]=0;
}
//深度优先搜索
void DFS(graph *g,int i)
{
printf("%3d",g->data[i]);
visited[i]=1;
for(int j=0;j<g->vexnum;j++)
{
if(!visited[j]&&g->side[i][j]) DFS(g,j);//两点同时满足未访问且两点间存在关系,递归调用
}
}
//用数组代替队列,实现功能
int Queue[N];
//初始化队列
void initqueue()
{
for(int i=0;i<N;i++) Queue[i]=0;
}
//广度优先遍历
void BFS(graph *g,int i)
{
int k,m=0;
int rear=0,front=0;
visited[i]=1;
Queue[rear]=i;//把下标入队
rear++;
while(front<rear)
{
k=Queue[front];//出队,记录下此时下标
front++;
for(int j=0;j<g->vexnum;j++)
{
if(g->side[k][j]&&!visited[j])
{
Queue[rear]=j;
rear++;
visited[j]=1;
}
}
}
//for(int m=0;m<g->vexnum;m++) printf("%3d",Queue[m]);
for(int m=0;m<g->vexnum;m++) printf("%3d",g->data[Queue[m]]);
}
int main()
{
graph g;
creatUDN(&g);
print(&g);
printf("深度优先遍历顺序为:\n");
DFS(&g,0);
printf("\n");
printf("广度优先遍历顺序为:\n");
BFS(&g,0);
return 0;
}




登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 0回复贴,共1页
<<返回数据结构吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示