首页 > 其他分享 >邻接矩阵的DFS

邻接矩阵的DFS

时间:2023-09-02 21:44:06浏览次数:36  
标签:Ver int Graph 邻接矩阵 MaxSize DFS include

采用递归的方法

  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 
  4 #define MaxSize 20
  5 
  6 typedef struct{
  7     int Ver[MaxSize];
  8     int Edge[MaxSize][MaxSize];
  9     int VerNum;
 10     int EdgeNum;
 11 }Graph;
 12 
 13 void CreateGraph(Graph &G)
 14 {
 15     int x,i,j;
 16     printf("输入顶点元素:\n");
 17     for(i=0;i<MaxSize;i++)
 18     {
 19         scanf("%d",&x);
 20         if(x==-1)
 21             break;
 22         else
 23         {
 24             G.Ver[i]=x;
 25             G.VerNum++;    
 26         }
 27     }
 28     
 29     printf("输入边(0/1):\n");
 30     for(i=0;i<G.VerNum;i++)
 31     {
 32         for(j=0;j<G.VerNum;j++)
 33         {
 34             scanf("%d",&x);
 35             G.Edge[i][j]=x;
 36             if(x==1)
 37                 G.EdgeNum++;
 38         }
 39     }
 40         
 41     G.EdgeNum=G.EdgeNum/2;
 42 }
 43 
 44 int ArrNum(Graph G,int ver)
 45 {
 46     for(int i=0;i<G.VerNum;i++)
 47         if(G.Ver[i]==ver)
 48             return i;
 49     return -1;
 50 }
 51 
 52 int FirstNeighbor(Graph G,int ver)
 53 {
 54     int x=ArrNum(G,ver);
 55     for(int i=0;i<G.VerNum;i++)
 56         if(G.Edge[x][i]==1)
 57             return i;
 58     return -1;
 59 }
 60 
 61 int NextNeighbor(Graph G,int ver,int w)
 62 {
 63     int x=ArrNum(G,ver);
 64     for(int i=w+1;i<G.VerNum;i++)
 65         if(G.Edge[x][i]==1)
 66             return i;
 67     return -1;
 68 }
 69 
 70 void DisplayGraph(Graph G)
 71 {
 72     int i,j;
 73     printf("顶点元素有%d个,边有%d个\n顶点元素分别是:",G.VerNum,G.EdgeNum);
 74     for(i=0;i<G.VerNum;i++)
 75         printf("%d ",G.Ver[i]);
 76     printf("\n");
 77     printf("邻接矩阵为:\n");
 78     for(i=0;i<G.VerNum;i++)
 79         for(j=0;j<G.VerNum;j++)
 80         {
 81             printf("%d ",G.Edge[i][j]);
 82             if(j==G.VerNum-1)
 83                 printf("\n");    
 84         }
 85 }
 86 
 87 bool visited[MaxSize];
 88 void DFS(Graph G,int v)
 89 {
 90     printf("%d ",G.Ver[v]);
 91     visited[v]=true;
 92     for(int w=FirstNeighbor(G,G.Ver[v]);w>=0;w=NextNeighbor(G,G.Ver[v],w))
 93     {
 94         if(!visited[w])
 95             DFS(G,w);
 96     }
 97 }
 98 
 99 void DFSTraverse(Graph G)
100 {
101     for(int i=0;i<G.VerNum;i++)
102         visited[i]=false;
103     for(int i=0;i<G.VerNum;i++)
104         if(!visited[i])
105             DFS(G,i);
106 }
107 
108 int main()
109 {
110     Graph G;
111     CreateGraph(G);
112     DisplayGraph(G);
113     
114     DFSTraverse(G);
115     return 0;    
116 } 

 

标签:Ver,int,Graph,邻接矩阵,MaxSize,DFS,include
From: https://www.cnblogs.com/simpleset/p/17674256.html

相关文章

  • 邻接矩阵的BFS
    intArrNum(GraphG,intver){for(inti=0;i<G.VerNum;i++)if(G.Ver[i]==ver)returni;elsereturn-1;}intFirstNeighbor(GraphG,intver){intx=ArrNum(G,ver);for(inti=0;i<G.VerNum;i++){......
  • dfs理解——以出栈方式的字典序为例(对上一个出栈字典序的完善和强化)
    笔者认为,dfs的本质在于试验每一方向和还原。试验每一方向的含义是:将实际题目中的条件几何化为多个方向,给这些方向赋予优先级(一般采用在dfs函数中写入顺序为优先级,这样比较简单方便),按照优先级的顺序来进行试验,每个节点都有基本相同的方向和优先级的,就可以使用dfs的方式解决。 ......
  • flume采集目录到HDFS案例:
    (1)采集需求:某服务器的某特定目录下,会不断产生新的文件,每当有新文件出现,就需要把文件采集到HDFS中去(2)根据需求,首先定义以下3大要素a):采集源,即source——监控文件目录:spooldirb):下沉目标,即sink——HDFS文件系统:hdfssinkc):source和sink之间的传递通道——chann......
  • 邻接矩阵存储无向图
    没有使用矩阵的压缩存储#include<stdlib.h>#include<stdio.h>#defineMaxVertexNum20typedefstruct{intVex[MaxVertexNum];//存储顶点intEdge[MaxVertexNum][MaxVertexNum];//存储边intVexNum;......
  • Hadoop HDFS3.0的默认配置项
    namevaluedescriptionhadoop.hdfs.configuration.version1versionofthisconfigurationfiledfs.namenode.rpc-addressRPCaddressthathandlesallclientsrequests.InthecaseofHA/Federationwheremultiplenamenodesexist,   thenameserviceidisad......
  • 使用python监控HDFS文件的增量【优化中】
    1.目录1、需求和步骤2、项目结构3、项目代码    3.1建表语句hdfs_Ctreate_table    3.2删除文件记录hdfs_delete_file_record.py    3.3文件路径的小时监控hdfs_path_Monitor.py    3.4文件路径的天监控hdfs_path_Monitor_day.py    3.5文......
  • hdu:Oil Deposits(dfs连通图)
    ProblemDescriptionTheGeoSurvCompgeologicsurveycompanyisresponsiblefordetectingundergroundoildeposits.GeoSurvCompworkswithonelargerectangularregionoflandatatime,andcreatesagridthatdividesthelandintonumeroussquareplots.......
  • hdu:手机的诱惑(dfs+剪枝)
    ProblemDescription张晨乐在一个古老的迷宫中发现了一个手机,这个手机深深地吸引了他。然而,当他拾起手机,迷宫开始摇晃,张晨乐能感觉到地面下沉。他意识到:这个手机只是一个诱饵!于是,他不顾一切地试图冲出这个迷宫。迷宫是一个大小为N*M的矩形,有一扇门,一开始,门是关闭的,并在第T秒打......
  • LeetCode题库77.组合——dfs典型解法,递归+回溯+剪枝
     classSolution:defcombine(self,n:int,k:int):nums=[x+1forxinrange(n)]res,ans=[],[]defdfs(nums:list[int]):iflen(ans)==k:ans_copy=ans.copy()#复制,避免ans数组改变使res跟着改变......
  • 【LeetCode回溯算法#12】二叉树的直径,树形dp的前置内容(使用dfs)
    二叉树的直径给你一棵二叉树的根节点,返回该树的直径。二叉树的直径是指树中任意两个节点之间最长路径的长度。这条路径可能经过也可能不经过根节点root。两节点之间路径的长度由它们之间边数表示。示例1:输入:root=[1,2,3,4,5]输出:3解释:3,取路径[4,2,1,3]或......