深度优先搜索c语言详解,深度优先搜索 — C语言版
思路:找一個入口結(jié)點,然后搜索該結(jié)點的第一個相鄰結(jié)點,再搜索該相鄰結(jié)點的第一個相鄰結(jié)點,依次往下尋找 … … ,直到所有結(jié)點都被遍歷到,算法結(jié)束,退出。
#include
#define MAX 100
typedef struct Graph{
int vn;
char vt[MAX];
int edge[MAX][MAX];
}df;
int size = 1;
int getindex(char tar,char sor[],int n);
void DFS(char v0,int n,int edge[][MAX],char vt[],int visited[]);
int main(){
int visited[10] = {0};
df dfs;
char ch = '\0';
scanf("%d",&dfs.vn);
ch = getchar();
int i = 0,j = 0;
for(i = 0;i < dfs.vn;i++){
scanf("%c",&dfs.vt[i]);
ch = getchar();
}
for(i = 0;i < dfs.vn;i++){
for(j = 0;j < dfs.vn;j++){
scanf("%d",&dfs.edge[i][j]);
}
}
printf("\n深度優(yōu)先搜索:\n");
DFS('a',dfs.vn,dfs.edge,dfs.vt,visited);
return 0;
}
int getindex(char v0,char vt[],int n){
int i = 0;
for(i = 0;i < n;i++){
if(v0 == vt[i]) return i;
}
return -1;
}
void DFS(char v0,int n,int edge[][MAX],char vt[],int visited[]){
int i = 0,j = 0;
int index = 0;
index = getindex(v0,vt,n);
if (index == -1){
printf("結(jié)點不存在!");
return;
}
if (size == n) printf("%c",vt[index]);
else printf("%c ->",vt[index]);
size++;
visited[index] = 1;
for(i = 0;i < n;i++){
if(edge[index][i] == 1 && visited[i] == 0){
DFS(vt[i],n,edge,vt,visited);
break;
}
}
for(i = 0;i < n;i++){
if(edge[index][i] == 1 && visited[i] == 0){
DFS(vt[i],n,edge,vt,visited);
break;
}
}
}
總結(jié)
以上是生活随笔為你收集整理的深度优先搜索c语言详解,深度优先搜索 — C语言版的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言如何监控网卡信息,查看网卡信息及状
- 下一篇: c语言readline库6,readli