01/10/2018, 16:20

Lỗi code C không nhảy vào lệnh gán

#include <stdio.h>
#include <stdlib.h>

#define true 1
#define false 0
void xuat(int a[], int n)
{
	    int i;
    	for(i=0;i<n;i++)
    	{
    		printf("a[%d] = %d    ",i,a[i]);
    	}
    	printf("
");
    }

    void queen(int a[], int n, int row)
    {
    	int r,c;
    	_Bool check = false;

    	if(row ==n)
    	{
    		xuat(a,n);
    		exit(0);
    	}
    	else{
    		for(c=0;c<n;c++)
    		{
    			check = true;
    			for(r =0;r<row;r++)
    			{
    				if(a[r] == c ||	          
    				   a[r]==(c+row-r) ||	  
    				   a[r]==(c-row+r) )
    				{
    					check = false;
    				}
    			}

    			if(check)
    			{
    				a[row] == c;
    				queen(a,n,row+1);
    			}

    		}
    	}
    }
int main()
{
	int a[4];
	int i;
	queen(a,4,0);
	return 0;
}

Code trên là bài Con Hậu, mình dùng quay lui. Nhưng dị cái là lần đầu làm thì code ra, xóa đi làm lại thì nó chạy sai, debug thấy nó không chạy vào hàm gán a[row] = c trong đoạn :
if(check) { a[row] == c; queen(a,n,row+1); }.
Có cao nhân nào biết chuyện gì xảy ra với dòng code đó chỉ mình với. Thanks .

NBQ viết 18:34 ngày 01/10/2018

Nhưng dị cái là lần đầu làm thì code ra, xóa đi làm lại thì nó chạy sai, debug thấy nó không chạy vào hàm gán a[row] = c trong đoạn :
if(check)
{
a[row] == c;
queen(a,n,row+1);
}.

lệnh a[row] == c; đơn thuần chỉ là một lệnh gán phần thử thứ row của mảng a = c chứ không phải hàm, nhưng ở đây cú pháp lệnh gán của bạn sai; không phải a[row] == c; (so sánh a[row] với c) mà phải là a[row] = c;

Bài liên quan
0