基本は、連結グラフの時と変わりませんが、 グラフが分かれていることを
示すために変数を持っています。
図は以下の非連結グラフを使っています。
1から4が一つのグラフとなっており
5から8が一つのグラフとなっています。
cでのプログラムになります。
#include実行結果using namespace std; #define MAX 8 bool visited[MAX]; void visit(int i); int GRAPH[MAX][MAX] = { {0,1,0,0,0,0,0,0}, {1,0,1,1,0,0,0,0}, {0,1,0,0,0,0,0,0}, {0,1,0,0,0,0,0,0}, {0,0,0,0,0,1,0,0}, {0,0,0,0,1,0,1,1}, {0,0,0,0,0,1,0,1}, {0,0,0,0,0,1,1,0} }; int main() { // 非連結用 int count = 1; for(int i = 0;i < MAX;++i){ if(!visited[i]){ printf("graph%d:",count++); visit(i); } } return 0; } void visit(int i){ visited[i] = true; for(int j = 0;j < MAX;++j){ if(GRAPH[i][j] == 1 && !visited[j]){ printf("%d->%d ",i + 1,j + 1); visit(j); } } }
graph1:1->2 2->3 2->4 graph2:5->6 6->7 7->8