klara7 Ответов: 1

Возникли проблемы с грубым принуждением, алгоритмом решения проблемы польского национального флага?


На столе лежит ряд из n > 1 шашек, некоторые из них красные, а некоторые белые. (Красный и белый-цвета польского национального флага.) Разработайте алгоритм перестановки шашек так, чтобы все красные шашки предшествовали всем белым.Единственными разрешенными операциями являются проверка цвета шашки и замена двух шашек.Постарайтесь свести к минимуму количество свопов, сделанных вашим алгоритмом.

Что я уже пробовал:

Это работает, но мне нужно использовать грубую силу или другой алгоритм.
entry='ccbbbbcbcbcbbcccb'
list2=list(entry)
print('entrance:'+ entry)
for i in range (0,len(entry)):
    if list2[i]=='c':
        result=''.join(list2)
        print( 'checking %s : %s ' % (i+1 ,result))
        
    else:
        result=''.join(list2)
        print( 'checking %s : %s ' % (i+1 ,result))
        
        for j in range(i+1,len(entry)):
            if list2[j]=='c':

                list2[i],list2[j]=list2[j],list2[i]
                result=''.join(list2)
                print('switch   '+result)
                break
                
print('Solution: '+result)

Patrice T

Можете ли вы привести пример ввода и результата, который вам нужен.

klara7

input= 'cccbbcbcb'
результат= 'cccccbbbb'

CHill60

Вам хочется задать актуальный вопрос?

klara7

Мне нужен алгоритм грубой силы для этой задачи

Richard MacCutchan

Просто пройдите по списку, перемещая все пункты b в конец. Очень простой.

klara7

не могу этого сделать, потому что "единственные разрешенные операции-это проверка цвета шашки и замена двух шашек",поэтому я не могу просто переместить их,и это все еще не грубое принуждение

Richard MacCutchan

Итак, найдите первую точку, где две шашки не совпадают,и поменяйте их местами. Затем повторите процесс с этой точки. Все еще довольно просто.

1 Ответов

Рейтинг:
0

Patrice T

Просто намек: можно считать, что " ccbbbbcbcbcbcccb' можно уменьшить до 'bbbbcbcbcbccc', найдите следующий шаг, чтобы еще больше уменьшить набор данных для сортировки.
Использование листа бумаги и экспериментирование-хорошая практика для поиска алгоритма.

Когда вы не понимаете, что делает ваш код или почему он делает то, что делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Просто установите точку останова и посмотрите, как работает ваш код, отладчик позволяет вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения, это невероятный инструмент обучения.

Отладчик-Википедия, свободная энциклопедия[^]
phpdbg | php отладчик[^]
Методы отладки для PHP-программистов[^]

Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.


klara7

Я понимаю, что делает мой код,но мне нужна грубая сила для этой проблемы, и я не знаю, как это сделать

Patrice T

Но ваша программа - это уже грубая сила.