图的深度优先搜索算法

引言

图是学习算法时必不可少的一部分,在算法中有着相当的重要性,在图的搜索算法中有两种基本的搜索算法,一种是图的深度优先算法,另一种是图的广度优先搜索算法。下面贴出图的深度优先搜索算法。

c++代码:

viod DFS(Graph G,int v)
    {
        cout<<GetValue(v)<<' ';//访问定点v
        visited[v]=1;           //定点v作访问标记
        int w=GetFirstNeighbor(v);//取v的第一个临界定点w
        while(w!=-1)             //若邻接定点w存在
        {
            if(!visited[w]) DFS(G,w);  //若定点w未访问过,递归访问定点w
            w=GetNextNeighbor(v,w);   //取定点v的排在w的后面的下一个邻接定点
        }
    }

完整代码如下

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int visit[7]={0};
int a[7][7]={{0,0,0,0,1,0,0},
             {0,0,1,0,0,0,1},
             {0,1,0,1,1,0,1},
             {0,0,1,0,1,0,1},
             {1,0,1,1,0,1,0},
             {0,0,0,0,1,0,1},
             {0,1,1,1,0,1,0}
};
int getfirst(int k)
{
    int i;
    for(i=0;i<7;i++)
    {
        if(a[k][i]!=0)
            break;
    }
    if(i==7)
        return -1;
    else
        return i;
}
int getnext(int i,int j)
{
    int k;
    for(k=j+1;k<7;k++)
    {
        if(a[i][k]==1)
            break;
    }
    if(k==7)
        return -1;
    else
        return k;
}
void DFS(int k)
{
    int w;
    printf("%d ",k+1);
    visit[k]=1;
    w=getfirst(k);
    while(w!=-1)
    {
        if(visit[w]==0)
        {
            printf(" ");
            DFS(w);
        }
        w=getnext(k,w);
    }
}
int main()
{
    DFS(0);
    return 0;
}
posted @ 2018-05-23 13:26  昨夜星辰_tx  阅读(337)  评论(0编辑  收藏  举报