#39209: 請問為什麼會一直TLE


betey20232 (佛仔)

學校 : 元智大學
編號 : 249420
來源 : [1.200.140.8]
最後登入時間 :
2024-01-26 12:12:04
b592. The Tower of Hanoi | From: [1.200.243.113] | 發表日期 : 2024-01-23 09:50

#include <iostream>
#include <cstring>
using namespace std;
char g(char a,char b){
    if(a=='1'&&b=='2'||a=='2'&&b=='1')
        return '3';
    else if(a=='1'&&b=='3'||a=='3'&&b=='1')
        return '2';
    else
        return '1';
        
}
void f(char a[], char b[],int p, int& num){
    bool x=0;
    char c[p];
    int i;
    for(i=p-1;i>=0;i--){
        if(a[i]!=b[i]){
        x=1;
        break;}}
       
    if(i==0)
    return;
    if(x==0){
    num--;
    return;
}
            bool flag=0;
            for(int j=i-1;j>=0;j--){
                if(a[j]!=g(a[i],b[i]))
                    flag=1;}
            if(flag==1){
            for(int l=p-1;l>=i;l--)
                c[l]=a[l];
            for(int j=i-1;j>=0;j--)
            c[j]=g(a[i],b[i]);
            f(a,c,p,num);
        f(c,b,p,num);
        }
            if(flag==0){
                for(int k=0;k<p;k++){
                    c[k]=a[k];    
                    }
                    c[i]=b[i];
                f(c,b,p,num);
                    
            }
            num++;
           
    }
int p;
int main()
{
  
    while(cin>>p&&p){
    char beg[p];
    char ove[p];
    for(int i=0;i<p;i++){
       cin>>beg[i];
    }
     for(int i=0;i<p;i++){
       cin>>ove[i];
    }
    int num=0;
    f(beg,ove,p,num);
    cout<<num+1<<endl;}
    return 0;
}


是演算法有問題嗎...還是說是EOF沒控制好?
 
ZeroJudge Forum