46 lines
896 B
C
46 lines
896 B
C
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <stdbool.h>
|
|
|
|
void dfs(char* arr, char* path, bool* visited, int num) {
|
|
int n = strlen(arr);
|
|
|
|
if (num == n) {
|
|
printf("%s\n", path);
|
|
return;
|
|
}
|
|
|
|
int m = strlen(path);
|
|
|
|
for (int i = 0; i < n; i++) {
|
|
if (!visited[i]) {
|
|
char* tmp = (char*)realloc(path, (m + 2) * sizeof(char));
|
|
tmp[m] = arr[i];
|
|
tmp[m + 1] = '\0';
|
|
|
|
visited[i] = true;
|
|
dfs(arr, tmp, visited, num + 1);
|
|
visited[i] = false;
|
|
}
|
|
}
|
|
}
|
|
|
|
int main() {
|
|
char arr[1000];
|
|
bool visited[1000] = {0};
|
|
|
|
fgets(arr, 1000, stdin);
|
|
int len = strlen(arr);
|
|
if (len > 0 && arr[len - 1] == '\n')
|
|
arr[len - 1] = '\0';
|
|
|
|
char* path = (char*)malloc(1);
|
|
path[0] = '\0';
|
|
|
|
dfs(arr, path, visited, 0);
|
|
|
|
free(path);
|
|
return 0;
|
|
}
|