第十二周项目三 图遍历算法实现
2015-12-11 08:42
489 查看
深度:
源文件:
#include"head.h" extern visited[MAXV]; void DFS(ALGraph *G, int v) { ArcNode *p; int w; visited[v]=1; printf("%d ", v); p=G->adjlist[v].firstarc; while (p!=NULL) { w=p->adjvex; if (visited[w]==0) DFS(G,w); p=p->nextarc; } }主函数:
#include"head.h"
int visited[MAXV];
int main()
{
int i;
ALGraph *G;
int A[5][5]=
{
{0,1,0,1,0},
{1,0,1,0,0},
{0,1,0,1,1},
{1,0,1,0,1},
{0,0,1,1,0}
};
ArrayToList(A[0], 5, G);
for(i=0; i<MAXV; i++)
visited[i]=0;
printf(" 由2开始深度遍历:");
DFS(G, 2);
printf("\n");
for(i=0; i<MAXV; i++)
visited[i]=0;
printf(" 由0开始深度遍历:");
DFS(G, 0);
printf("\n");
return 0;
}
广度:
源文件:
#include"head.h"
extern visited[MAXV];
void BFS(ALGraph *G, int v)
{
ArcNode *p;
int w,i;
int queue[MAXV],front=0,rear=0; //定义循环队列
int visited[MAXV]; //定义存放节点的访问标志的数组
for (i=0; i<G->n; i++) visited[i]=0; //访问标志数组初始化
printf("%2d",v); //输出被访问顶点的编号
visited[v]=1; //置已访问标记
rear=(rear+1)%MAXV;
queue[rear]=v; //v进队
while (front!=rear) //若队列不空时循环
{
front=(front+1)%MAXV;
w=queue[front]; //出队并赋给w
p=G->adjlist[w].firstarc; //找w的第一个的邻接点
while (p!=NULL)
{
if (visited[p->adjvex]==0)
{
printf("%2d",p->adjvex); //访问之
visited[p->adjvex]=1;
rear=(rear+1)%MAXV; //该顶点进队
queue[rear]=p->adjvex;
}
p=p->nextarc; //找下一个邻接顶点
}
}
printf("\n");
}
主函数:
#include"head.h"
int visited[MAXV];
int main()
{
ALGraph *G;
int A[5][5]=
{
{0,1,0,1,0},
{1,0,1,0,0},
{0,1,0,1,1},
{1,0,1,0,1},
{0,0,1,1,0}
};
ArrayToList(A[0], 5, G);
printf(" 由2开始广度遍历:");
BFS(G, 2);
printf(" 由0开始广度遍历:");
BFS(G, 0);
return 0;
}
相关文章推荐
- 我是ptspzy
- MVC框架基础
- 第四周 项目3 单链表应用(1)
- LeetCode 221 Maximal Square
- Quartz.NET学习系列
- Xcode iOS布局autolayout和sizeclass的使用
- cs231n 问题
- 要引入java吸管工具
- 第15周项目1-验证算法
- 第十四周 项目3 是否二叉排序树
- Linux控制器(Controller)与适配器(Adapter)
- Remove Duplicates from Sorted Array II
- 第十五周项目1-验证算法(3)
- 第十三周项目5
- 2763: [JLOI2011]飞行路线
- java经典位运算实例
- 【ASP】英语九百句-ASP输出JSON,AJAX异步请求到本地存储localstorage
- 第十五周项目1-验证算法
- 第十二周项目4-利用遍历思想求解图问题(5)
- Java中hashCode的作用