01/10/2018, 17:14
Về bài toán con mã đi tuần
//BT ve con ma di tuan
#include <iostream>
#include <iomanip>
using namespace std;
const int n = 8;
int a[n][n];//luu tru thu tu di tuan
//Luu cac vi tri co the qua
int dx[8] = {-2, -1, 1, 2, 2, 1, -1, -2};
int dy[8] = {-1, -2, -2, -1, 1, 2, 2, 1};
void KhoiTao()
{
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
a[i][j] = 0;
}
//i: So luot da di, (x,y): toa do ma o vi tri cuoi cung
void ThuNuocDiKe(int i, int x, int y, bool &q)
{
int k, u, v;
bool q1;//q1: Luu thanh cong/that bai
k = 0;//Chi so cac kha nang con ma di chuyen
do{
//Thu vi tri moi --> that bai
q1 = false;
u = x + dx[k];
v = y + dy[k];
if((0 <= u) && (u < n) && (0 <= v) && (v < n) && (a[u][v] == 0))
{
//Gan vi tri con ma di qua
a[u][v] = i;
if(i < n * n)//con vi tri trong
{
ThuNuocDiKe(i + 1, u, v, q1);
if(q1 == false)
a[u][v] = 0;
}
else q1 = true;
}
k++;
}while((q1 == false) && (k < 8));
q = q1;
}
void InBanCo()
{
for(int i = 0; i < n; i++)
{
for(int j = 0; j < n; j++)
cout<<setw(4)<<a[i][j];
cout<<endl;
}
}
int main()
{
bool q = false;
KhoiTao();
a[4][5] = 1;
ThuNuocDiKe(2, 4, 5, q);
InBanCo();
return 0;
}
Các cao nhân cho e hỏi đoạn mã trên ở dòng
if(q1 == false)
a[u][v] = 0;
nó có tác dụng khi nào ạ?
Bài liên quan
Hồi lại nước đi (nhánh) nếu không thành công.
vậy nó có liên quan gì tới q=q1; không ạ?
q=q1
xem như là kết quả trả về của hàm, vì nó là tham chiếucảm ơn a, vậy đối với hàm void, có tham chiếu thì được coi là kết quả trả về của nó ạ
Đó là mẹo (để trả về nhiều giá trị) chứ không có định nghĩa như vậy.
Ở đây có thể viết lại hàm để trả về q luôn. Viền mảng nữa là được.