深搜,广搜
来源:互联网 发布:控制系统仿真软件 编辑:程序博客网 时间:2024/05/01 04:14
//实验要求: //用邻接表存储一个无向图,//深度优先,广度优先遍历//拓扑排序 #include<stdio.h> #include<stdlib.h> #include<string.h>typedef int status ;struct ljno //邻接表数据类型 {int x; //存储数据ljno* next; }ss;struct ALGraph{ljno *data ;int vexnum,exnum;//顶点个数和边的个数 };status InitGraph(ALGraph &G){printf("请输入顶点的总个数:");scanf("%d",&G.vexnum);if((G.data=(ljno*)malloc(sizeof(ljno)*(G.vexnum+1)))==NULL)//下标为0的空间舍去不用 exit(-1);for(int i=1;i<=G.vexnum;++i) G.data[i].x=i,G.data[i].next=NULL;}status insert(ALGraph &G,int a,int b) //将数据 b 插入第a 行 //升序插入 {ljno *p,*q,*t;q=&G.data[a];p=q->next;//printf("----\n");while(p){if(b==(p->x))break;else if(b<(p->x)){t=(ljno*)malloc(sizeof(ljno));if(NULL==t)exit(-1);q->next=t;t->x=b;t->next=p;}p=p->next;q=q->next;}if(NULL==p&&b!=q->x){t=(ljno*)malloc(sizeof(ljno));if(NULL==t)exit(-1);q->next=t;t->x=b;t->next=p;}}status CreatGraph(ALGraph &G) //创建邻接矩阵 {printf("请输入边的总条数:");scanf("%d",&G.exnum) ;for(int a,b,i=1;i<=G.exnum;++i){scanf("%d%d",&a,&b);insert(G,a,b);insert(G,b,a); // 无序图!!! }}void DFS(ALGraph G,int v,int visit[]) // 深度优先遍历 { ljno* p=&G.data[v]; for(p=p->next;p;p=p->next) { if(!visit[p->x]) { visit[p->x]=1; printf("->%d",p->x); DFS(G,p->x,visit); } }}void DFSTraver(ALGraph G,int visit[]){for(int i=1;i<=G.vexnum;++i){if(!visit[i]){printf("->%d",i);visit[i]=1;}DFS(G,i,visit);}printf("\n");}struct Queue{int* base; int front; int real; //指向队尾的上一个位置 }Q; status initQueue(Queue &Q) {Q.base=(int *)malloc(100*sizeof(int));if(!Q.base){printf(" 内存分配失败,程序终止!\n");exit(-1);}Q.front=Q.real=0; return 1;}bool emptyQueue(Queue Q) {if(Q.front==Q.real)return true;return false;}void Enqueue(Queue &Q,int v) // 入队 {//printf("入队元素为:%d\n",v);Q.base[Q.real]=v;Q.real++;}void Dequeue(Queue &Q,int &u) //出队 {if(!emptyQueue(Q)){u=Q.base[Q.front];Q.front++;}//printf("删除元素为:%d\n",u);}void printqueue(Queue Q) { int k=Q.front; printf("\n****************\n");while(k!=Q.real){ printf(" %d",Q.base[k]); k++;}printf("\n****************\n");}void BFS(ALGraph G,int v,int visit[],Queue &Q) // 广度优先遍历 {int u;//initQueue(Q); !!!!!! 出错位置 ljno* p=&G.data[v];for(p=p->next;p;p=p->next){if(!visit[p->x]){visit[p->x]=1;Enqueue(Q,p->x);//printqueue(Q) ;printf("->%d",p->x);}}//vv(Q);while(!emptyQueue(Q)){Dequeue(Q,u);//printqueue(Q) ;BFS(G,u,visit,Q); }}void BFSTraver(ALGraph G,int visit[]) {for(int i=1;i<=G.vexnum;++i){if(!visit[i]){visit[i]=1;printf("->%d",i);}initQueue (Q);BFS(G,i,visit,Q);}printf("\n");}/*void vi(ALGraph G) //输出 邻接表 {for(int i=1;i<=G.exnum;++i){ljno* p=&G.data[i];while(p){printf("%d,",p->x);p=p->next;}printf("\n");}}*/int main(){ALGraph G;InitGraph(G); int visit[100]; memset(visit,0,sizeof(visit));CreatGraph(G); printf("深度优先搜索:\n"); DFSTraver(G,visit); //vi(G); memset(visit,0,sizeof(visit)); printf("广度优先搜索:\n") ; BFSTraver(G,visit);return 0;}
0 0
- 深搜 广搜
- 深搜&&广搜_Poj_3083
- 深搜 广搜
- 深搜---广搜。。。
- 深搜,广搜
- poj2386,广搜,深搜
- 广搜 深搜
- HDU1254(广搜+深搜)
- HDU--1044--深搜+广搜
- poj 3083 深搜+广搜
- Cleaning Robot 广搜+深搜
- 广搜
- 广搜
- 广搜
- 广搜
- 广搜
- 广搜
- hdu 1254 推箱子 广搜+ 深搜
- verilog温故知新
- CentOS7下mariadb的操作
- 《Effective C++》让自己习惯C++:条款1-条款4
- hdu1074Doing Homework dp+状态压缩
- 已知ipa,求网络log信息
- 深搜,广搜
- python yeild 生成器
- weblogic12c下配置节点管理器管理受管理服务器
- jsp里面,实现跳转,可以在javascript里面,添加代码:
- 理解MySQL——架构与概念
- 40自定义土司&&点击事件的自定义布局
- 顺时针打印m*n矩阵
- 两个复数相加
- 理解RESTful架构