나의정답.
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
#include <stack>
int cnt = 0;
int** copyMap(int** map, int size) {
int** tmp = new int* [size];
for (int i = 0; i < size; i++)
tmp[i] = new int[size];
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
tmp[i][j] = map[i][j];
}
}
return tmp;
}
void dfs(int curNode, int** map, int targetNode) {
int size = targetNode + 1;
int** tmp = new int* [size];
for (int i = 0; i < size; i++)
tmp[i] = new int[size];
if (curNode == targetNode) {
cnt++;
}
else {
for (int j = 0; j < size; j++) {
tmp = copyMap(map, size);
if (map[curNode][j] == 1) {
for (int i = 0; i < size; i++)
tmp[i][curNode] = 0;
dfs(j, tmp, targetNode);
}
}
}
for (int i = 0; i < size; i++)
delete[] tmp[i];
delete[] tmp;
}
int main(int argc, char** argv) {
//freopen("input.txt", "rt", stdin);
int n, m, a, b, i, j;
scanf("%d %d", &n, &m);
// 인접행렬 생성
int** map = new int*[n];
for (i = 0; i < n; i++)
map[i] = new int[n];
// 인접행렬 0으로 초기화
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
map[i][j] = 0;
// 간선 연결
for (i = 0; i < m; i++) {
scanf("%d %d", &a, &b);
map[a - 1][b - 1] = 1;
}
dfs(0, map, n - 1);
printf("%d", cnt);
for (i = 0; i < n; i++)
delete[] map[i];
delete[] map;
}