Я пытаюсь напечатать все перестановки строки, используя рекурсию, как показано ниже. Но мне было интересно, можем ли мы использовать bfs или dfs для этого, думаю, правильно?печать перестановки с использованием bfs или dfs
Если да, то можете ли вы, пожалуйста, дать мне представление? Моя идея: если строка = «ABCD» начального узла: «а» конечный узел: «d» промежуточные узлы: «B» и «с»
Мы можем затем изменить начальные узлы «б ',' c 'и' d '.
У меня возникли трудности с визуализацией его, чтобы поместить его в алгоритм.
#include <stdio.h>
void swap(char *s, int i, int j)
{
char temp = s[i];
s[i] = s[j];
s[j] = temp;
}
void foo(char *s, int j, int len)
{
int i;
if (j == len-1) {
printf("%s\n", s);
return;
}
for (i=j;i<len;i++) {
swap(s, i, j);
foo(s, j+1, len);
swap(s, i, j);
}
}
int main()
{
char s[] = "abc";
foo(s, 0, strlen(s));
}
Исходя из логики данного Сержем Rogatch ниже проблемы могут быть решены:
def swap_two(s, i, j):
return s[:i] + s[j] + s[i+1:j] + s[i] + s[j+1:]
def swaps(s):
for i in range(1, len(s)):
yield swap_two(s, 0, i)
def print_permutations(input, q):
seen_list = []
q.enqueue(input)
while not q.isempty():
data = q.dequeue()
for i in swaps(data):
if i not in seen_list:
q.enqueue(i)
seen_list.append(i)
return seen_list
q = queue(512)
seen_list = print_permutations("abcd", q)
print(sorted(seen_list), len(seen_list))
реализация очереди here
Возможно, вы ищете обратное отслеживание: https://en.wikipedia.org/wiki/Backtracking – SashaMN
Похожее: http://stackoverflow.com/questions/31826746/trying-to-generate-9-digit-numbers- с-each-unique-digit – user3386109
@ user3386109: извините, это совершенно противоположно. –