AcWing 842. 排列数字 C & Go
原题链接
简单
作者:
LaChimere
,
2021-05-23 15:02:27
,
所有人可见
,
阅读 167
C
#include <stdio.h>
#define MAXSIZE 10
int n, path[MAXSIZE], visited[MAXSIZE];
void dfs(int depth) {
if (depth == n) {
for (int i = 0; i < n; ++i) {
printf("%d ", path[i]);
}
printf("\n");
return;
}
for (int i = 1; i <= n; ++i) {
if (visited[i]) {
continue;
}
path[depth] = i;
visited[i] = 1;
dfs(depth+1);
visited[i] = 0;
}
}
int main() {
scanf("%d", &n);
dfs(0);
return 0;
}
Go
package main
import "fmt"
var (
n int
path []int
visited []bool
)
func dfs(depth int) {
if depth == n {
for i := 0; i < n; i++ {
fmt.Printf("%d ", path[i])
}
fmt.Println()
return
}
for i := 1; i <= n; i++ {
if visited[i] {
continue
}
path[depth] = i
visited[i] = true
dfs(depth + 1)
visited[i] = false
}
}
func init() {
fmt.Scan(&n)
path, visited = make([]int, n+1), make([]bool, n+1)
}
func main() {
dfs(0)
}