dfs,bfs算法探究

来源:互联网 发布:邮件营销软件 编辑:程序博客网 时间:2024/06/01 07:47

用了点时间,写了dfs算法和bfs算法,节点图片,代码,运行结果如下:

节点图片:

   

测试数据:

1 2
1 5
2 3
2 4
3 6
4 7
4 8
5 8
5 9
6 10
7 10
8 10
9 10


dfs测试代码如下:

 

#include <iostream>#include <cstdio>using namespace std;#define MAX 10+1int edge[MAX][MAX];int flag[MAX];/**节点的标示*/void init(){int i,j;int m,n;    for(i=1; i<=MAX; i++)    {        flag[i]=0;/**表示没有被访问过*/        for(j=1; j<=MAX; j++)        {            edge[i][j]=edge[j][i]=0;        }    }while(~scanf("%d%d",&m,&n))edge[m][n]=1;}void dfs(int edge[][MAX],int start,int count){int queue[MAX],i=1,pre;queue[1]=start;flag[1]=1;/**先处理第一个节点,表示已经访问过*/while(i>0){pre=queue[i];queue[i]=0;i--;for(int j=1;j<=count;j++){if(edge[pre][j]==1 && flag[j]==0)/**将pre的未被访问的邻接节点放进来*/{queue[++i]=j;            flag[j]=1;}}        printf("第 %d 个节点;\n",pre);}}int main(){    freopen("input.txt","r",stdin);init();dfs(edge,1,10);/**一共10个节点,以0号节点开始*/return 0;}



dfs测试结果:

bfs的关键代码如下

void bfs(int edge[][MAX],int start,int count){    int left,right;    int queue[MAX],pre;    left=right=0;    queue[++right]=start;flag[start]=1;    while(left<right)    {        pre=queue[++left];        for(int i=1;i<=count;i++)        {            if(edge[pre][i]==1 && flag[i]==0)            {                queue[++right] = i;                flag[i] = 1;            }        }        printf("第 %d 个节点\n",pre);    }}

然后只需要将主函数的调用部分改一改就可以了;

测试结果如下:


0 0
原创粉丝点击