Từ 1 tới 2 trên tổng số 2 kết quả

Đề tài: Code bài toán n Hậu viết bằng C++. Chương trình không chạy nếu n > 14?

  1. #1
    Ngày gia nhập
    09 2011
    Bài viết
    2

    Lightbulb Code bài toán n Hậu viết bằng C++. Chương trình không chạy nếu n > 14?

    Các anh xem giùm em tại sao Chương trình không chạy với chiều dài bàn cờ >=14, chỉ đúng với các trường hợp 4 <= n <= 13.

    Code:
    #include <conio.h>
    #include <string.h>
    #include <iostream>
    #include <stdlib.h>
    #include <math.h>
    #include <Windows.h>
    #define Max 20
    using namespace std;
    
    void Hau(char a[Max][Max], int n, int count, int cot[Max]);
    
    void main()
    {
    	double t1 = GetTickCount();
    	char a[Max][Max];
    	int i,j,n;
    	do
    	{
    		cout<<"Nhap Cap ban co: ";
    		cin>>n;
    	}while(n <= 3);
    	int k,dem = 1;
    	for(k=0;k<n;k++)
    	{
    		for(i=0;i<n;i++)
    			for(j=0;j<n;j++)
    				a[i][j] = '*';
    		int cot[Max] = {0};
    		cot[0] = k;
    		Hau(a,n,0,cot);
    		cout<<"Truong hop thu: "<<dem<<"\n\n";
    		for(i=0;i<n;i++)
    		{
    			for(j=0;j<n;j++)
    				cout<<a[i][j]<<" ";
    			cout<<"\n";
    		}
    		dem++;
    		cout<<"\n";
    	}
    	double t2 = GetTickCount();
    	cout<<"\n\n******CHUONG TRINH CHAY DUOC: "<<fabs(t1-t2);
    	getch();
    }
    
    //Quy dinh '*' la o trong trong ban co
    //Quy dinh 'x' la HAU
    //cot[Max] chua cac cot trong dong Max
    //n la so con hau trong ban co n x n
    void Hau(char a[Max][Max], int n, int count, int cot[Max])
    {
    	if(count < 0 || count >= n)
    		return;
    	if(cot[count] < 0 || cot[count] >= n)
    		return;
    	else
    	{
    		int i,test,k;
    		for(i=cot[count];i < n;i++)
    		{
    			test = 0;
    			if(count == 0 && cot[count] == 0)
    			{
    				a[count][0] = 'x';
    				break;
    			}
    			else if(count == 0)
    			{
    				a[count][0] = 'x';
    				cot[count] = i;
    				break;
    			}
    			else
    			{
    				//Xet theo dong count tro xuong
    				//Kiem tra xem co con Hau nao chua hop le
    				//Test se dem cac truong hop dung va phai du truong hop dung thi chap nhan
    				for(k=0;k<count;k++)
    				{
    					if(cot[k] != i && abs(cot[k] - i) != abs(k - count))
    						test++;
    					else
    						break;
    				}
    				if(test == count)
    				{
    					a[count][i] = 'x';
    					cot[count] = i;
    					break;
    				}
    			}
    			if(test == count)
    				break;
    		}
    		if(test != count)
    		{
    			do
    			{
    				a[count-1][cot[count-1]] = '*';
    				cot[count] = 0;
    				cot[count-1]++;
    				count--;
    				if(count < 0)
    					return;
    			}while(cot[count] == n);
    			Hau(a,n,count,cot);
    		}
    		else
    			Hau(a,n,count+1,cot);
    	}
    }
    Đã được chỉnh sửa lần cuối bởi we004338 : 19-09-2011 lúc 07:09 PM.

  2. #2
    Ngày gia nhập
    07 2010
    Nơi ở
    chỗ kín
    Bài viết
    446

    không phải không chạy mà là chạy quá lâu, có thể còn tràn số nữa.

    thật tình cờ, mình cũng vừa làm bt này xong, thay N là số hàng ( giá trị mặc định trong code là 8)
    (không quen viết commen, thông cảm!).

    Visual C++ Code:
    1. #include<stdio.h>
    2. #define N   8
    3. short x[N] = {0};
    4.  
    5. void VietNghiem()
    6. {
    7.     static short i = 0;
    8.     short j;
    9.     printf("(%2d) ",++i);
    10.     for( j = 0; j < N; j++) printf( "%d ", x[j] );
    11.     printf( "\n\n");
    12. }
    13.  
    14. short KiemTra( short i )
    15. {
    16.     short j;
    17.     for( j = 0 ; j < i ; j++) if( x[i] == x[j] || i - x[i] == j - x[j] || i + x[i] == j + x[j]) return 0;
    18.     return 1;
    19. }
    20.  
    21. void XepHau(short i )
    22. {
    23.     short j;
    24.     if( i == N ) VietNghiem();
    25.     else
    26.         for( j = 0 ; j < N ; j++)
    27.         {
    28.             x[i] = j;
    29.             if( KiemTra( i)) XepHau( i+1);
    30.         }
    31. }
    32.  
    33. int main()
    34. {
    35.     XepHau( 0);
    36.     getchar();
    37.     return 0;
    38. }

Các đề tài tương tự

  1. Làm sao khắc phục tình trạng viết code chỉ để chạy được?
    Gửi bởi xOkyox trong diễn đàn Kinh nghiệm CNTT
    Trả lời: 12
    Bài viết cuối: 07-12-2012, 11:22 PM
  2. Sâu đục yahoo viết bằng VC++, mới chế xong code
    Gửi bởi hoanglinh9466 trong diễn đàn Dự án & Source code VC++
    Trả lời: 21
    Bài viết cuối: 26-08-2012, 11:38 PM
  3. Bài tập C++ Em viết code này nhưng những lỗi báo em sửa oy thì vẫn không chạy được
    Gửi bởi minhthanh_vfu trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 1
    Bài viết cuối: 07-11-2011, 10:46 PM
  4. Code giải Phương trình bậc 2 viết bằng C. Lỗi chỉ chạy được khi a=0?
    Gửi bởi themoon152 trong diễn đàn Thảo luận, góp ý code C/C++ của bạn
    Trả lời: 3
    Bài viết cuối: 23-12-2010, 11:44 AM
  5. Thuật toán BFS viết bằng C++, code không chạy được?
    Gửi bởi johansen trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 11-02-2008, 09:37 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn