• DFS遍历图(链式邻接表实现)


     1 #include<iostream>
     2 #include<string.h>
     3 #include<stdlib.h>
     4 #include<stdio.h>
     5 using namespace std;
     6 struct Node{
     7     int num;
     8     Node * next;
     9 }node[1000];
    10 int vis[1000];
    11 void insert_link(Node *a,int value){
    12     while(a->next!=NULL){
    13         a=a->next;
    14     }
    15     Node *p=(Node *)malloc(sizeof(Node));
    16     p->num=value;
    17     p->next=NULL;
    18     a->next=p;
    19 }
    20 void DFS(Node  * node,int root){
    21     Node *p=node+root;
    22     int now=p->num;
    23     vis[now]=1;
    24     while(p->next!=NULL){
    25         int tmp=p->next->num;
    26         if(!vis[tmp]){
    27             DFS(node,tmp);
    28         }
    29         p=p->next;
    30     }
    31 }
    32 int main(){
    33     cout<<"下一行输入n和v表示图的顶点数和边数."<<endl;
    34     int n,v;
    35     cin>>n>>v; //输入顶点数n,边数v
    36     for(int i=1;i<=n;i++){ //初始化邻接表
    37         node[i].next=NULL;
    38         node[i].num=i;
    39     }
    40     printf("接下来 %d 行输入每条边的两个端点
    ",v);
    41     for(int i=0;i<v;i++){
    42         int x,y;
    43         cin>>x>>y; //输入边
    44         insert_link(node+x,y); //插入邻接表
    45         insert_link(node+y,x); //插入邻接表
    46     }
    47     memset(vis,0,sizeof(vis));
    48     DFS(node,1); //以node[1]为初始节点深度遍历图
    49     bool flag=true;
    50     for(int i=1;i<=n;i++){
    51         if(!vis[i]){
    52             flag=false;
    53         }
    54     }
    55     if(flag){
    56         cout<<"该图是无向连通图"<<endl;
    57     }else{
    58         cout<<"该图不是一个无向连通图"<<endl;
    59     }
    60     return 0;
    61 }
  • 相关阅读:
    Log4Net学习【三】
    Log4Net学习【二】
    Log4Net学习【一】
    Asp.Net生命周期系列六
    Asp.Net生命周期系列五
    Asp.Net生命周期系列四
    Asp.Net生命周期系列三
    我为什么很烦在DB服务器上安装杀毒软件
    SQL Server 2012故障转移的looksalive check和is alive check
    如何让用户只能访问特定的数据库(MSSQL)
  • 原文地址:https://www.cnblogs.com/ISGuXing/p/9075295.html
Copyright © 2020-2023  润新知