linux學習總結(資料結構之圖的遍曆)

來源:互聯網
上載者:User

 圖的深度和廣度優先演算法

#include <stdio.h>#include <stdlib.h>#include <errno.h>#include <strings.h>#define N 5#define M 10typedef int datatype;typedef struct { datatype data[M]; int front,rear;}sequeue;sequeue * create(){ sequeue * sq; if((sq = (sequeue *)malloc(sizeof(sequeue)))==NULL) {  perror("malloc");  exit(-1); } sq ->front = sq->rear =0;  return sq;}int isempty(sequeue * sq){ return (sq ->front) == (sq->rear);}void  ensequeue(sequeue * sq,datatype data){ sq ->rear = (sq->rear+1)%M; sq ->data[sq->rear] = data; return ;}datatype desequeue(sequeue * sq){ datatype data; sq ->front = (sq->front+1)%M; data = sq->data[sq->front]; return data;}void visit(int v){ printf("V%d\n",v);}int firstadj(int matrix[][N],int v) //第一鄰接點{ int i; for(i = 0;i < N;i++) {  if(matrix[v][i] ==1)  //矩陣特性,第一個不為0的點就是第一鄰接點了   return i;   } return -1;}int nextadj(int matrix[][N],int v,int u) //下一鄰接點{ int i; for(i = u+1;i< N; i++) {  if(matrix[v][i] == 1)   return i; } return -1;}void DFS(int  matrix[][N],int v,int visited[]) //深度優先搜尋{ int u; visit(v); visited[v] = 1; u = firstadj(matrix,v); while(u >= 0) {  if(visited[u] == 0)   DFS(matrix,u,visited);  u = nextadj(matrix,v,u); }}void BFS(int matrix[][N],int v,int visited[]) //廣度優先搜尋{ int u; sequeue *sq; sq = create(); visit(v); visited[v] = 1; ensequeue(sq,v); while(!isempty(sq)) {  v = desequeue(sq);  u = firstadj(matrix,v);  while(u >= 0)  {   if(visited[u] == 0)   {    visit(u);    visited[u] = 1;    ensequeue(sq,u);   }   u = nextadj(matrix,v,u);  } }}int main(){ int i,j; int visited[N] = {0};   int matrix[N][N] = {{0}}; while(1) {  scanf("%d,%d",&i,&j);  if(i ==j)   break;  matrix[i][j] = matrix[j][i] = 1;  //將無向圖抽象成矩陣,5*5的矩陣 } printf("DFS:\n"); DFS(matrix,0,visited); printf("BFS:\n"); bzero(&visited,sizeof(visited));     //要將visited清空 BFS(matrix,0,visited);  return 0;} 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.