Chào các bác, em học về bài toán sinh đang làm 1 bài tập như này:
Cho một hình chữ nhật gồm mxn hình vuông
đơn vị. Hãy liệt kê tất cả các đường đi từ đỉnh cuối của ô
vuông cuối cùng phía bên trái đến đỉnh đầu của ô vuông
trên cùng phía bên phải. Biết mỗi bước đi chỉ đuợc phép
dịch chuyển sang bên phải hoặc lên trên theo các cạnh
của hình vuông đơn vị.
Em code bằng c++ để liệt kê các cấu hình như sau:
//sinh day nhi phan co m so 1 va n so 0
#include <iostream>
using namespace std;
int m,n;
void init(int a[],int mSize);//sinh cau hinh dau tien
void display(int a[], int mSize);//Hien thi cac cau hinh
bool isFinal(int a[], int mSize);//Check cau hinh
void genNext(int a[],int mSize);//Sinh cau hinh tiep theo
void output(int a[], int mSize);//Hien thi cau hinh dang nhi phan
int mPow(int n);//Tinh 2 mu n
int main(){
cout<<"m = ";
cin>>m;
cout<<"n = ";
cin>>n;
int mSize = m+ n;
int a[mSize];
init(a,mSize);
int x = mPow(mSize);
cout<<x<<endl;
int count= 0;
for(int i = 0;i<x;i++){
genNext(a,mSize);
if(isFinal(a,mSize)){
output(a,mSize);
display(a,mSize);
count++;
}
}
cout<<endl<<count<<endl;
return 0;
}
void init(int a[],int mSize ){
for(int i = 0;i<mSize;i++){
a[i] = 0;
}
}
void display(int a[],int mSize){
for(int i = 0;i<mSize;i++){
if(a[i]==1) cout<<"➜"<<" ";
else cout<<"↑"<<" ";
}
cout<<endl;
}
void output(int a[],int mSize){
for(int i = 0;i<mSize;i++){
cout<<a[i];
}
cout<<endl;
}
bool isFinal(int a[],int mSize ){
int sum = 0;
for(int i = 0;i<mSize;i++){
sum += a[i];
}
return (sum==m);
}
void genNext(int a[], int n){
int i = n-1;
while(a[i] == 1){
a[i]=0;
i--;
}
a[i] = 1;
}
int mPow(int n){
int res = 1;
for(int i = 0;i<n;i++) res*=2;
return res;
}
Em chạy chương trình vẫn ra đủ cấu hình nhưng bị lỗi Segmentation fault như bên dưới
000111
↑ ↑ ↑ → → →
001011
↑ ↑ → ↑ → →
001101
↑ ↑ → → ↑ →
001110
↑ ↑ → → → ↑
010011
↑ → ↑ ↑ → →
010101
↑ → ↑ → ↑ →
010110
↑ → ↑ → → ↑
011001
↑ → → ↑ ↑ →
011010
↑ → → ↑ → ↑
011100
↑ → → → ↑ ↑
100011
→ ↑ ↑ ↑ → →
100101
→ ↑ ↑ → ↑ →
100110
→ ↑ ↑ → → ↑
101001
→ ↑ → ↑ ↑ →
101010
→ ↑ → ↑ → ↑
101100
→ ↑ → → ↑ ↑
110001
→ → ↑ ↑ ↑ →
110010
→ → ↑ ↑ → ↑
110100
→ → ↑ → ↑ ↑
111000
→ → → ↑ ↑ ↑
Segmentation fault
Các bác các chú các ông các anh các chi có thể cho em hỏi em đang sai chỗ nào không ạ ? Em cảm ơn ạ :V

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?