{"id":28554682,"url":"https://github.com/zukahai/algorithm-n-queens-demo","last_synced_at":"2026-03-15T12:39:30.172Z","repository":{"id":108539025,"uuid":"374915463","full_name":"zukahai/Algorithm-N-queens-demo","owner":"zukahai","description":"NQueen","archived":false,"fork":false,"pushed_at":"2021-06-11T11:55:48.000Z","size":665,"stargazers_count":5,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-07-07T06:42:24.018Z","etag":null,"topics":["blog","demo","java","nqueen"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zukahai.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2021-06-08T07:08:19.000Z","updated_at":"2022-07-28T16:09:41.000Z","dependencies_parsed_at":null,"dependency_job_id":"52e408da-341a-4a3c-a8bd-8960631f97e0","html_url":"https://github.com/zukahai/Algorithm-N-queens-demo","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/zukahai/Algorithm-N-queens-demo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zukahai%2FAlgorithm-N-queens-demo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zukahai%2FAlgorithm-N-queens-demo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zukahai%2FAlgorithm-N-queens-demo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zukahai%2FAlgorithm-N-queens-demo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zukahai","download_url":"https://codeload.github.com/zukahai/Algorithm-N-queens-demo/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zukahai%2FAlgorithm-N-queens-demo/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30541927,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-15T12:15:27.454Z","status":"ssl_error","status_checked_at":"2026-03-15T12:15:26.919Z","response_time":61,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["blog","demo","java","nqueen"],"created_at":"2025-06-10T05:06:55.313Z","updated_at":"2026-03-15T12:39:30.166Z","avatar_url":"https://github.com/zukahai.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"## \u003cp align=\"center\"\u003e Algorithm-N-queens-demo \u003c/p\u003e\n\n\u003cp align=\"center\"\u003e \u003cimg src=\"https://github.com/zukahai/HaiZuka/blob/master/Images/AlgorithmNQueen/1.jpg\" alt=\"Tieude\" /\u003e \u003c/p\u003e\n\n### Mô Phỏng Thuật Toán N Quân Hậu\nNếu bạn là người chưa nghe qua thuật ngữ \"Thuật toán N quân hậu\", hoặc chưa biết thuật toán đó hoạt động như thế nào, thì hôm nay trong bài viết này mình sẽ chia sẻ cho các bạn hiểu về thuật toán này bằng một chương trình mô phỏng dễ hiểu\n\n### Thuật toán N quân hậu là gì?\nThuật toán N quân hậu là gì?\n\nNhư các bạn đã biết thì một quân hầu trên bàn cờ có thể di chuyển theo hàng ngang, cột dọc và 2 đường chéo.\n\u003cp align=\"center\"\u003e \u003cimg src=\"https://github.com/zukahai/HaiZuka/blob/master/Images/AlgorithmNQueen/2.png\" alt=\"blogimage\" /\u003e \u003c/p\u003e\n\nBài toán được đặt ra như sau: Cho một bàn cờ có kích thước NxN (N ≥ 1), Bạn có thể đặt đúng N quân hậu lên bàn cờ (mỗi ô chỉ chứa tối đa một quân hậu), hãy đưa ra cách đặt N quân hậu sao cho không có 2 quân hậu nào ăn được nhau, nói cách khác là trên mỗi hàng, một cột, mỗi đường chéo của bàn cờ chỉ chứa tối đa một quân hậu.\n\nVí dụ với N = 4 thì có 2 cách đặt thỏa mãn như sau:\n\u003cp align=\"center\"\u003e \u003cimg src=\"https://github.com/zukahai/HaiZuka/blob/master/Images/AlgorithmNQueen/3.png\" alt=\"blogimage\" /\u003e \u003c/p\u003e\nThuật toán giải bài toán N quân hậu\nNhận xét bài toán: Chúng ta cần đặt N quân hậu sau cho trên mỗi hàng, một cột, mỗi đường chéo của bàn cờ chỉ chứa tối đa một quân hậu, như vậy trên mỗi hàng sẽ có đúng 1 quân hậu được đặt, ta sẽ đánh số quân hậu đặt trên hàng i là quân thậu thứ i.\n\nNhư vậy chúng ta có thể làm như sau:\n\nXét tất cả các trường hợp đặt quân hậu của thứ nhất (có N trường hợp), với mỗi trường hợp đặt quân hậu thứ nhất, ta xét các cách đặt quân hậu thứ 2, quận hậu thứ 2 cũng cũng có thể đặt ở N ví trị trên hàng thứ 2, nhưng nó phải né tránh sau cho không bị quân hậu thứ nhất ăn được nó,... với quân hậu thứ i nó cũng sẽ có N cách đặt, và nó cũng phải né tránh những ô mà i - 1 quân hậu trước đó có thể ăn được nó. Như vậy chúng ta có thể hình dùng là ta sẽ dùng N vòng for lồng nhau, với mỗi vòng for sẽ tìm chỉ số cột của quân hậu đó, để làm được việc này thì sử dụng đệ quy quay lui là hợp lý.\n\nCách kiểm tra một ô vuông có nằm trong tầm ngắm của các quân hậu trước đó hay không:\n- Sử dụng mảng boolean c để đánh dấu các cột của bàn cờ (c[i] = true nếu trên cột i chưa đặt quân hậu nào)\n- Sử dụng màng bool c1 để đánh dấu các đường chéo song song với đường chéo chính của bạn cờ (c[i - j + N -1] = true, nghĩa là đường chéo đi qua ô(i, j) và song song với đường chéo chính chưa được đặt quân hậu nào.\n- Sử dụng màng bool c2 để đánh dấu các đường chéo song song với đường chéo phụ của bạn cờ (c[i + j - 2] = true, nghĩa là đường chéo đi qua ô(i, j) và song song với đường chéo phụ chưa được đặt quân hậu nào.\n\nSau tìm xong vị trí của quân hậu thứ N thì ta lưu output đó lại.\nHàm đệ quy được viết như sau:\n```Java\nbool check(int i, int j) {\n    if (c[j] == false || c1[i - j + N - 1] == false || c2[i + j - 2] ==  false)\n        return false;\n    return true;\n}\n\nvoid NQueen(int i) {\n    for (int j = 1; j \u003c= N; j++)\n        if (check(i, j)) {\n            x[i] = j;\n            c[j] = c1[i - j + N - 1] = c2[i + j - 2] = false;\n            if (i == N)\n                a.push_back(x);\n            else\n                NQueen(i + 1);\n            c[j] = c1[i - j + N - 1] = c2[i + j - 2] = true;\n        }\n}\n```\nCác bạn có thể xem full source code C++ [Tại đây](https://github.com/zukahai/Algorithm-N-queens-demo/blob/master/NQueen.cpp)\n\n### Mô phỏng thuật toán N quân hậu\nĐể mô phỏng thuật toán này mình đã sử dụng java swing, giao diện chính của phần này sẽ như thế này:\n\u003cp align=\"center\"\u003e \u003cimg src=\"https://github.com/zukahai/HaiZuka/blob/master/Images/AlgorithmNQueen/4.png\" alt=\"blogimage\" /\u003e \u003c/p\u003e\n\n### Video Demo\n[\u003cp align=\"center\"\u003e \u003cimg src=\"https://github.com/zukahai/HaiZuka/blob/master/Images/AlgorithmNQueen/5.png\" alt=\"blogimage\" /\u003e \u003c/p\u003e](https://www.youtube.com/watch?v=Veh6GkVWPT0)\n\n## \u003cp align=\"center\"\u003e  :tv: Thanks for whatching :earth_africa: \u003c/p\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzukahai%2Falgorithm-n-queens-demo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzukahai%2Falgorithm-n-queens-demo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzukahai%2Falgorithm-n-queens-demo/lists"}