2012-10-01 37 views
5

thể trùng lặp:
generate strings with all permutation of characterphát hoán vị đệ quy cho các ký tự

Tôi mới bắt đầu trong C++, và tôi thực sự cần sự giúp đỡ của bạn. Tôi đang làm chương trình cho hoán vị bằng cách sử dụng đệ quy. Đây là mã của tôi nhưng đầu ra là lạ, có những con số giống nhau lặp đi lặp lại nhiều lần và không gian. Tôi không thể tìm ra vấn đề là gì hoặc có lẽ tôi cần phải thêm nhiều hơn nữa. Làm ơn giúp tôi. Đây là mã của tôi:

#include <iostream> 
using namespace std; 
#define swap(x,y,t) ((t)=(x), (x)=(y), (y)=(t)) 
void perm(char *list, int i, int n); 

int main(){ 
    char a[4]={'a','b','c'}; 
    perm(a,0,3); 
    //cout<<a<<endl;  
    return 0; 
} 

void perm(char *list, int i, int n){ 
    int j, temp; 
    if (i==n){ 
     for (j=0; j<=n; j++) 
      printf("%c", list[j]); 
     printf("  "); 
    } 
    else { 
     for (j=i; j<=n; j++){ 
      swap(list[i],list[j],temp); 
      perm(list,i+1,n); 
      swap(list[i],list[j],temp); 
      cout<<list<<endl; 
     } 
    } 
} 
+0

Bạn có thể tiết kiệm cho mình rất nhiều rắc rối bằng cách đơn giản bằng cách sử dụng chức năng 'next_permutation' xây dựng vào' '. –

Trả lời

1

Chức năng này chính xác nhưng bạn không gọi chính xác.

perm(a,0,3); 

nên

perm(a,0,2); 

Tại sao?

của bạn cho vòng lặp:

for (j=i; j<=n; j++){ 

đi đến n, vì vậy n phải là một chỉ số hợp lệ.

Works fine

+0

cảm ơn rất nhiều phản hồi của bạn ^^))) – bionian

Các vấn đề liên quan