(12.18)无向图的深度搜索(邻接矩阵)

来源:互联网 发布:联合国统计数据库 编辑:程序博客网 时间:2024/05/22 00:29
深度搜索:DFS,就是从其中一个顶点v开始,,访问顶点,然后,从v开始往一个方向搜索,直到遇到的下一个搜索目标是已经搜索过的,然后返回上一个结点,判断有没有结点是没有被搜索过的,若没有,继续返回上一层,直到所有的都被访问完。


先用邻接矩阵写一遍


贴下代码:

#include<iostream>
usingnamespacestd;
constintvertex_max= 20//初始设定顶点的最大值为20 
structGraph
{
  charvertex[vertex_max];  //建立顶点表
  intarc[vertex_max][vertex_max];  //邻接矩阵
  intvertexnum, arcnum;  //顶点个数,边个数
};

voidCreatGraph(Graph&G)
{
  inti, j , k ,w; //w是权值
  cout<<"请输入顶点个数和边的个数:"<<endl;
  cin>>G.vertexnum>>G.arcnum;
  cout<<"请依次输入顶点的信息:"<<endl;
  for(i= 0 ;i <G.vertexnum ;i ++)
     cin>>G.vertex[i];
  for(i= 0 ;i <G.vertexnumi++)        //初始化邻接矩阵
     for(j  =0 ; j < G.vertexnumj++)
     {
         if(i== j)
            G.arc[i][j]= 0;
         else
         G.arc[i][j]= INT_MAX;
     }
  cout<<"请输入边(Vi,Vj)的下标i,j和权值:"<<endl;
  cout<<endl;
  cout<<                i   j   weight "<<endl;
  for(k= 0 ;k <G.arcnum ;k ++)
  {
     cout<<"请输入第"<<k+1<<"条边的信息:";
     cin>>i>>j>>w;
     G.arc[i][j]= w;
     G.arc[j][i]= G.arc[j][i];
  }
  cout<<"creatsuccessful!"<<endl;
}


boolvisted[vertex_max];   //访问标志的数组

voidDFS(GraphG,inti)
{
   intj;
   visted[i]= true;
   cout<<G.vertex[i]<<";
   for(j= 0 ;j <G.vertexnum ;j++)
   {
      if(G.arc[i][j]== 1&&!visted[j])
         DFS(G,j);        
   }
}


voidDFSTraverse(GraphG)
{
   inti;
   for(i= 0 ;i< G.vertexnum ;i ++)
      visted[i]= false                   //初始化所有结点都为未访问状态
   for(i= 0 ;i <G.vertexnumi++)
   {
      if(!visted[i])
         DFS(G,i);
   }
}

intmain()
{
   Graph G;
   CreatGraph(G);
   cout<<"DFS遍历此无向图:"<<endl;
   DFSTraverse(G);
   cout<<endl;
}








原创粉丝点击