DFSを使用して、C++で方向図のパスをナビゲートします.


1.指定方向図の幹線を入力すると、1番から最大番までの分岐数のコードが出力される


1行目には、頂点数Nと幹線数Mが与えられる.
#include <iostream>
#include <vector>

using namespace std;
int n, m, cnt = 0;
int ch[101];
vector<int> V[101];

void DFS(int vertex) {
	if(vertex == n) {		// 종료 조건 
		cout << "path is : ";
		for(int i=1; i<=n; i++) {
			if(ch[i] == 1) cout << i << " ";
		}
		cout << "\n";
		cnt++;
	}
	else {
		for(int i=0; i<V[vertex].size(); i++) {
			int next_vertex = V[vertex][i];
			
			if(ch[next_vertex] == 0) {
				ch[next_vertex] = 1;
				DFS(next_vertex);
				ch[next_vertex] = 0;	
			}
		}
	} 
}

int main() {
	freopen("input.txt", "rt", stdin);
	cin >> n >> m;
	
	for(int i=1; i<=m; i++) {
		int a, b;
		cin >> a >> b;
		V[a].push_back(b);
	}
	ch[1] =1;		// 1번 정점에서 출발
	DFS(1);
	cout << cnt; 
	return 0;
} 
  • V[a].push back:vector配列を宣言し、そのvertextから到達可能なvertextを挿入します.
  • ch[next vertex]=1:この頂点にアクセスすると仮定すると
  • となる.
  • ch[next vertex]=0:頂点にアクセスしないと仮定した場合、
  • ex)
    5 9
    1 2
    1 3
    1 4
    2 1
    2 3
    2 5
    3 4
    4 2
    4 5