2016-10-26 7 views
0

Мне нужно написать алгоритм рекурсии hanoi с тремя параметрами. Это то, что я получил:Почему моя башня ханойского алгоритма не работает?

#include <stdio.h> #include <stdio.h> 

void hanoi(int m, int i, int j); 
void move(int start, int end); 

int main(){ 
    int n = 0; 
    int i = 1; 
    int j = 3; 
    printf("Enter how many disks you want to move: "); 
    scanf("%d", &n); 
    int m = n; 
    hanoi(m,i,j); 

} 

void hanoi(int m, int i, int j){  
    if (m==1) 
    { 
     move(i,j); 
     return; 
    } 
    hanoi(m-1,i,2); 
    move(i,j); 
    hanoi(m-1,2,j); 

} 

void move(int start, int end){ 
    printf("A disk moves from position %d. to %d.\n", start,end); 
} 

Выход при п = 3 является следующее:

Enter how many disks you want to move: 3 
A disk moves from position 1. to 2. 
A disk moves from position 1. to 2. 
A disk moves from position 2. to 2. 
A disk moves from position 1. to 3. 
A disk moves from position 2. to 2. 
A disk moves from position 2. to 3. 
A disk moves from position 2. to 3. 

Я посмотрел на другие алгоритмы, я знаю, что есть тонны тех, для решения Гулд старой проблемы Ханоя , Тем не менее, все они имеют 4 параметра и используют символы, тогда как я хотел бы использовать только цифры и не учитывать параметр вспомогательной башни в моей функции. Как я могу это исправить? При n = 1 и n = 2 алгоритм работает нормально.

+1

используют пожалуйста описательные имена переменных. –

+1

проблема в том, что '2' жестко запрограммирован. –

+0

@ KarolyHorvath Я вижу ... Как я могу обойти это? Включение переменной со значением 2 в начале функции не решит ее.:/ – SoflolikeAntonio

ответ

1

код должен использовать другой затычку, а не 2, как прокомментировал @Karoly Horvath

void hanoi(int m, int i, int j){  
    if (m==1) { 
     move(i,j); 
     return; 
    } 
    int Other_peg = (1+2+3) - i - j; 
    hanoi(m-1,i,Other_peg); 
    move(i,j); 
    hanoi(m-1,Other_peg,j); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^