首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

深度优先搜索DFS——图邻接矩阵示意

2012-10-20 
深度优先搜索DFS——图邻接矩阵表示同样的DFS,这个是用邻接矩阵保存的图,或许应用没有那么广,要浪费较多的空

深度优先搜索DFS——图邻接矩阵表示

同样的DFS,这个是用邻接矩阵保存的图,或许应用没有那么广,要浪费较多的空间,但是还是有必要实现一下的,和之前那个算法的思想是一样的,只是变换了存储结构。

/*图邻接矩阵表示DFSinput:17A 0 0 0 0 1 0 0B 0 0 1 1 0 0 0C 0 1 0 1 0 0 0D 0 1 0 0 1 1 0E 1 0 0 1 0 0 1F 0 0 0 1 0 0 0G 0 0 0 0 1 0 0output:A E D B C F G*/#include<iostream>#include<cstring>using namespace std;struct Graph{    //图邻接矩阵表示    char data;    bool *adjacency;};void Create(Graph G[],int n){    //创建图邻接矩阵表示    int i,j;    for(i=1; i<=n; i++){        cin>>G[i].data;        G[i].adjacency = new bool[n];        for(j=1; j<=n; j++)cin>>G[i].adjacency[j];    }}void DFS(Graph G[],int vex,int n,bool visited[]){    //DFS图邻接矩阵表示    if(!visited[vex]){        visited[vex] = true;        cout<<G[vex].data<<' ';        int i;        for(i=1; i<=n; i++){            if(G[vex].adjacency[i] && !visited[i])DFS(G,i,n,visited);        }    }}int main(){    Graph *G;    bool *visited;    int t,n;    cin>>t;    while(t--){        cin>>n;        G = new Graph[n];        visited = new bool[n];        memset(visited,0,sizeof(visited));        Create(G,n);        DFS(G,1,n,visited);        cout<<endl;    }    return 0;}


热点排行