图的深搜与广搜

来源:互联网 发布:java如何解决并发问题 编辑:程序博客网 时间:2024/04/29 16:34

#include<iostream>#include<queue>#define MAXNUM 20using namespace std;struct Graph{    int Vertex[MAXNUM];    int Arc[MAXNUM][MAXNUM];    int VertexNum,ArcNum;};int n,m;int vis[MAXNUM];Graph G;queue<int> q;void dfs(int index){    int i;    cout<<index<<" ";    vis[index]=1;    for(i=0; i<G.VertexNum; i++)        if(vis[i]==0&&G.Arc[index][i]!=0)            dfs(i);}void dfsG(){    int i;    for(i=0; i<G.VertexNum; i++)        vis[i]=0;    for(i=0; i<G.VertexNum; i++)        if(vis[i]==0)            dfs(i);}void bfs(int index){    int i,num;    cout<<index<<" ";    vis[index]=1;    q.push(index);    while(!q.empty())    {        num=q.front();        q.pop();        for(i=0; i<G.VertexNum; i++)        {            if(G.Arc[num][i]!=0&&vis[i]==0){                cout<<i<<" ";                vis[i]=1;                q.push(i);            }        }    }}void bfsG(){    int i;    for(i=0; i<G.VertexNum; i++)        vis[i]=0;    for(i=0; i<G.VertexNum; i++)    {        if(vis[i]==0)        {            bfs(i);        }    }}int main(){    cout<<"Put in Points and Arc?"<<endl;    cin>>G.VertexNum>>G.ArcNum;    cout<<"Put some information about arcs:For Example(0 1 power)"<<endl;    for(int i=0; i<G.ArcNum; i++)    {        cin>>n>>m;        cin>>G.Arc[n][m];//边权重        //G.Arc[m][n]=G.Arc[n][m];//有向无向就差这一句话    }    cout<<"DFS:";    dfsG();    cout<<endl<<"---------"<<endl;    cout<<"BFS:";    bfsG();    return 0;}

首先图在计算机中的存储方式有两种。邻接矩阵和邻接表两种方式。但是就单纯的做题来说,邻接表方法太复杂。邻接矩阵相对简单。以下便是通过邻接矩阵来表示图,对图的dfs与bfs。由于自身学习时是需要带权重的。因此在后边增加了权重输入,根据要求可以更改。

0 0
原创粉丝点击