Đề bài là như thế này:"Nhập vào 2 từ.Từ thứ nhất là từ gốc,từ thứ hai là từ đảo.In ra các chuỗi i và o để đảo chữ thứ nhất thành chữ thứ hai.'i' là đẩy một ký tự vào stack(push),'o' là lấy từ một ký tự ở đỉnh stack(pop)."Đây là code của mình,tuy nhiên nó bị mắc cái lỗi mình chả hiểu sao lại bị .Ở hàm process_solution,khi mình in ra kết quả thì nếu có bất kỳ một câu lệnh in ( printf ) nào ngoài if thì nó sẽ in ra đúng.Còn nếu ko có thì nó ko in ra gì luôn .
Code:
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <string.h>

#define STACKSIZE       1000
#define MAXCANDIDATES   100		
#define NMAX            100		
char src[NMAX],des[NMAX];
int finished = 0;                  
typedef struct {
        char s[STACKSIZE+1];		
        int top;                        
        int count;                      
} stack;

void init_stack(stack *s)
{
        s->top = -1;
        s->count = 0;
}


void push(stack *s, char x)
{
		s->top = s->top + 1;
		s->s[ s->top ] = x;
                s->count = s->count + 1;
}

char pop(stack *s)
{
        char x;
                x = s->s[ s->top ];
                s->top = s->top - 1;
                s->count = s->count - 1;
        return(x);
}
bool check(char a[],char b[],int k)
{
     int i,n,m;
     m = strlen(b);
     if ( m != k ) return false;
     else 
     for (i=0;i<k;i++)
         if ( a[i] != b[i] ) return false;
         
}

void process_solution (char a[], int k)
{
	int i,l=0,m=0;				
	char ex_des[NMAX];
    stack s1;
	
    init_stack(&s1);
	for ( i=1;i<=k;i++ )
    {
        if ( a[i] == 'i' )
        {
             push(&s1,src[m]);
             m++;
        }
        else if ( s1.count != 0 ) 
        {
             ex_des[l] = pop(&s1);
             l++;
        }
    }
    if ( check(ex_des,des,l) )
    {
         for ( i=1;i<=k;i++ ) printf("%c",a[i]);
         printf("\n");
    }
    printf("\n");          // Khi minh xoa dong nay di thi no ko in ra ji ca.Ko xoa thi in dung
}

int is_a_solution(char a[], int k, int n)
{
    return (k == n);
}
void construct_candidates(char a[], int k, int n, char c[], int *ncandidates)
{
	c[0] = 'i';
	c[1] = 'o';
	*ncandidates = 2;
}
void backtrack(char a[], int k, int input)
{
        char c[MAXCANDIDATES];           
        int ncandidates;                
        int i;                          

        
        if (is_a_solution(a,k,input))
                process_solution(a,k);
        else {
                k = k+1;
                construct_candidates(a,k,input,c,&ncandidates);
                for (i=0; i<ncandidates; i++) {
                        a[k] = c[i];
                        backtrack(a,k,input);
	                    if (finished) return;	
                }
        
        
        }
}

int main()
{
	char a[NMAX];
    int n;		
	gets(src);
    gets(des);
    n = strlen(src);
    backtrack(a,0,2*n);
    getch();
}