zoukankan      html  css  js  c++  java
  • DFS深度优先搜索 算法基础篇(六)

    View Code
    // DFS算法.cpp : 定义控制台应用程序的入口点。
    //
    
    #include "stdafx.h"
    #include <stack>
    #include <iostream>
    using namespace std;
    #define Max 20
    typedef int  ElemType;
    
    struct Vertex
    {
        ElemType V;
        bool Visit;
    };
    
    typedef int EdgeType;
    
    struct Graphic
    {
        Vertex Vex[Max];
        EdgeType Edge[Max][Max];
        int Arc;
        int VexNum;
    };
    typedef struct Graphic* Graph;
    
      void ReadGraph(Graph G) //读图函数
      {
          int i;
          int from,to;
          memset(G->Edge,0,sizeof(G->Edge));
         for( i=0;i<Max;i++)
         {
             G->Vex[i].V=i;
             G->Vex[i].Visit=false;
         }      
             printf("请输入点数和边数: ");
           scanf("%d%d",&(G->VexNum),&(G->Arc));
           for( i=0;i<G->Arc;i++)
            {
                printf("请输入第%d条边的起点终点:",i+1);
                scanf("%d%d",&from,&to);
                G->Edge[from][to]=1;
                G->Edge[to][from]=1;
            }
      
      }
    
      void DFSStack(Graph G,int next)  //栈版本
      {
          stack<Vertex> vStack;
          vStack.push(G->Vex[next]);
          Vertex vTemp;
          while(!vStack.empty())
          {
              vTemp=vStack.top();
              vStack.pop();
                      cout<<"Vex= "<<vTemp.V<<" ";
              G->Vex[vTemp.V].Visit=true;
        
              for(int i=0;i<G->VexNum;i++)
              {
                if(G->Edge[vTemp.V][i]==1&&!(G->Vex[i].Visit))
                {
                    G->Vex[i].Visit=true;
                    vStack.push(G->Vex[i]);
                }
              }
          }
    
      }
    
    
      void DFSRecursive(Graph G,int next) //迭代版本
      {
          int i=0;
          G->Vex[next].Visit=true;
          cout<<"Vex= "<<G->Vex[next].V<<"  ";
          for(;i<G->VexNum;i++)
          {
              if(G->Edge[G->Vex[next].V][i]==1&&!(G->Vex[i].Visit))
                  DFSRecursive(G,i);
          }
    
      }
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        Graph G=(Graph)malloc(sizeof(struct Graphic));
    
        ReadGraph( G);
    //    DFSRecursive(G,0);
        DFSStack( G,0);
        return 0;
    }
  • 相关阅读:
    C#中KeyDown和KeyPress区别
    c#快捷键设置和text输入限制
    问题总结
    c#串口编程和单片机通信重大发现
    c#类似单片机的8bit或运算
    c#中将默认常量(32bit)转换为8bit
    我的秋季个人阅读计划
    学期总结
    阅读笔记《软件秘籍》03
    阅读笔记--09
  • 原文地址:https://www.cnblogs.com/cslave/p/2550259.html
Copyright © 2011-2022 走看看