ENG  RUSTimus Online Judge
Online Judge
Задачи
Авторы
Соревнования
О системе
Часто задаваемые вопросы
Новости сайта
Форум
Ссылки
Архив задач
Отправить на проверку
Состояние проверки
Руководство
Регистрация
Исправить данные
Рейтинг авторов
Текущее соревнование
Расписание
Прошедшие соревнования
Правила
вернуться в форум

Обсуждение задачи 1054. Ханойская башня

what case is not obeyed in my code??
Послано Ravi Maggon 21 авг 2010 19:08
Tried all test cases i know but it gives wrong answer for test#1.
Can anyone please tell me what case is failing in my code?

#include<stdio.h>
int count=0,ni;
int seq[31][31];
int a=-1,b=-1,c=-1,move=-1,movea=-1,moveb=-1,movec=-1,flag=0,go=0;
void tower(int n,char beg,char aux,char end)
{
     if(n==1)
     {
            int begin,ends,k,m;
            begin=(int)(beg-48)-1;
            ends=(int)(end-48)-1;
            count++;
            for(k=ni-1;k>0;k--)
                seq[ends][k]=seq[ends][k-1];
            seq[ends][0]=seq[begin][0];
            for(k=0;k<ni-1;k++)
                        seq[begin][k]=seq[begin][k+1];
            seq[begin][ni-1]=0;
            /*for(k=0;k<3;k++)
            {
                            for(m=0;m<ni;m++)
                                             printf("%d",seq[k][m]);
                            printf("\n");
                            }
                            printf("\n");
            */for(k=0;k<ni;k++)
            {
                    if(seq[a][k]==1)
                    {
                          movea=1;
                          break;
                    }
            }
            for(k=0;k<ni;k++)
            {
                    if(seq[b][k]==2)
                    {
                          moveb=1;
                          break;
                    }
            }
            for(k=0;k<ni;k++)
            {
                    if(seq[c][k]==3)
                    {
                          movec=1;
                          break;
                    }
            }
            if(movea==1&&moveb==1&&movec==1&&flag==0)
            {
                          flag=1;
                          move=count;
            }
            movea=-1;
            moveb=-1;
            movec=-1;
            return;
     }
     else
     {
            tower(n-1,beg,end,aux);
            tower(1,beg,aux,end);
            tower(n-1,aux,beg,end);
     }
}
void assign()
{
     int k,j;
     for(k=1;k<3;k++)
     {
             for(j=0;j<ni;j++)
                     seq[k][j]=0;
     }
             for(j=0;j<ni;j++)
                     seq[0][j]=(j+1);
}
int main()
{
    scanf("%d",&ni);
    assign();
    scanf("%d %d %d",&a,&b,&c);
    if(a==1)
            a--;
    else
    if(a==3)
            a=1;
    if(b==1)
            b--;
    else
    if(b==3)
            b=1;
    if(c==1)
            c--;
    else
    if(c==3)
            c=1;
    tower(ni,'1','2','3');
    printf("%d",move);
    return 0;
}