五子棋對弈

問題描述

"在五子棋的對弈中,友誼的小船說翻就翻?" 不!對小藍和小橋來說,五子棋不僅是棋盤上的較量,更是心與心之間的溝通。這兩位摯友秉承著"友誼第一,比賽第二"的宗旨,決定在一塊?5×55×5?的棋盤上,用黑白兩色的棋子來決出勝負。但他們又都不忍心讓對方失落,于是決定用一場和棋(平局)作為彼此友誼的見證。

比賽遵循以下規則:

  1. 棋盤規模:比賽在一個?5×55×5?的方格棋盤上進行,共有?2525?個格子供下棋使用。
  2. 棋子類型:兩種棋子,黑棋與白棋,代表雙方。小藍持白棋,小橋持黑棋。
  3. 先手規則:白棋(小藍)具有先手優勢,即在棋盤空白時率先落子(下棋)。
  4. 輪流落子:玩家們交替在棋盤上放置各自的棋子,每次僅放置一枚。
  5. 勝利條件:率先在橫線、豎線或斜線上形成連續的五個同色棋子的一方獲勝。
  6. 平局條件:當所有?2525?個棋盤格都被下滿棋子,而未決出勝負時,游戲以平局告終。

在這一設定下,小藍和小橋想知道,有多少種不同的棋局情況,既確保棋盤下滿又保證比賽結果為平局。

答案提交

這是一道結果填空題,你只需要算出結果后提交即可。本題的結果為一個整數,在提交答案時只填寫這個整數,填寫多余的內容將無法得分。

運行限制

語言最大運行時間最大運行內存
C++1s256M
C1s256M
Java3s512M
Python310s512M
PyPy33s512M
Go5s512M
JavaScript5s512M

總通過次數: 721 |總提交次數: 1521 |通過率: 47.4%c茶

超時代碼

#include <bits/stdc++.h>
using namespace std;
int mp[6][6];
int cnt;
bool check()
{int cnt1  = 0, cnt2 = 0;for(int i = 1; i <= 5; i++){for(int j = 1; j <= 5; j++){if(mp[i][j] == 1)cnt1++;if(mp[i][j] == 2)cnt2++;}}if(cnt1 != 12 || cnt2 != 13)    return false;for(int i = 1; i <= 5; i++){int flag = true;for(int j = 1; j <= 5; j++){if(mp[i][j] != mp[i][1]){flag = false;break;}}if(flag)    return false;}for(int i = 1; i <= 5; i++){int flag = true;for(int j = 1; j <= 5; j++){if(mp[j][i] != mp[1][i]){flag = false;break;} }if(flag)    return false;}int flag = true;for(int i = 1; i <= 5; i++){int  j = i;if(mp[i][j] != mp[1][1]){flag = false;break;}}if(flag)    return false;flag = true;for(int i = 1; i <= 5; i++){int j = 6 - i;if(mp[i][j] != mp[5][1]){flag = false;break;}}if(flag)    return false;return true;}
void dfs(int a, int b)
{if(b == 6){dfs(a + 1, 1); return;}if(a == 6){if(check())cnt++;return;}mp[a][b] = 1;dfs(a, b + 1);mp[a][b] = 0;mp[a][b] = 2;dfs(a, b + 1);mp[a][b] = 0;
}
int main()
{dfs(1, 1);cout << cnt << endl;
}

ac代碼

#include<iostream>
using namespace std;
int mp[5][5];
long long sum=0;
void check(){int a=0;for(int i=0;i<5;i++){for(int j=0;j<5;j++){if(mp[i][j]==1) a++;}}if(a!=13) return;//此時滿足13-12 int count=0;count+=mp[0][0]+mp[1][1]+mp[2][2]+mp[3][3]+mp[4][4];if(count%5==0) return; count=0;count+=mp[0][4]+mp[1][3]+mp[2][2]+mp[3][1]+mp[4][0];if(count%5==0) return; count=0;for(int i=0;i<5;i++){count+=mp[i][0]+mp[i][1]+mp[i][2]+mp[i][3]+mp[i][4];if(count%5==0) return; count=0;count+=mp[0][i]+mp[1][i]+mp[2][i]+mp[3][i]+mp[4][i];if(count%5==0) return; count=0;}//滿足平局 sum++;
}
void dfs(int num){//依次由從左往右,再到從上往下的順序遍歷if(num==25){//棋盤下滿 check();return;}int x=num/5,y=num%5;//換算成坐標mp[x][y]=0;dfs(num+1);mp[x][y]=1;dfs(num+1);
}
int main(){dfs(0);//從0開始,遍歷所有結果cout<<sum;//3126376return 0;
}
#include <bits/stdc++.h>
using namespace std;
int mp[5][5];
int u=0;
void dfs(int sum,int h,int b)
{//地圖滿了;判斷if(sum==25){if(h==13&&b==12){for(int i=0;i<5;i++){int s=mp[i][0]+mp[i][1]+mp[i][2]+mp[i][3]+mp[i][4];if(s==5||s==0) return;}for(int i=0;i<5;i++){int m=mp[0][i]+mp[1][i]+mp[2][i]+mp[3][i]+mp[4][i];if(m==5||m==0) return;}int p=mp[0][0]+mp[1][1]+mp[2][2]+mp[3][3]+mp[4][4];int l=mp[0][4]+mp[1][3]+mp[2][2]+mp[3][1]+mp[4][0];if(p==0||p==5||l==0||l==5) return;u++;}return;}int x=sum/5;int y=sum%5;//計算坐標mp[x][y]=1;//選擇白棋dfs(sum+1,h+1,b);mp[x][y]=0;選擇黑棋dfs(sum+1,h,b+1);
}
int main()
{dfs(0,0,0);cout<<u;return 0;
}
#include <bits/stdc++.h>
using namespace std;
int ans, upp = (1 << 5) - 1;
bitset<5>area[6];
bool check(int y)
{if (area[y].count() == 5 || area[y].count() == 0)return false;if (y == 5){int sum = 0;int _sum = 0;for (int i = 0; i < 5; i++){sum = 0;for (int j = 1; j <= 5; j++)sum += area[j][i], _sum += area[j][i];if (sum == 0 || sum == 5)return false;}if (_sum != 13)return false;int suml = 0, sumr = 0;for (int i = 1; i <= 5; i++){suml += area[i][i-1];sumr += area[i][5-i];}if (suml == 5 || suml == 0 || sumr == 5 || sumr == 0)return false;}return true;
}
void dfs(int y)
{if (y == 6){ans++;return;}for (int i = 1; i <= upp; i++){bitset<5>temp(i);area[y] = temp;if (check(y))dfs(y + 1);}
}
int main()
{dfs(1);cout << ans;return 0;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/894501.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/894501.shtml
英文地址,請注明出處:http://en.pswp.cn/news/894501.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

使用 HTTP::Server::Simple 實現輕量級 HTTP 服務器

在Perl中&#xff0c;HTTP::Server::Simple 模塊提供了一種輕量級的方式來實現HTTP服務器。該模塊簡單易用&#xff0c;適合快速開發和測試HTTP服務。本文將詳細介紹如何使用 HTTP::Server::Simple 模塊創建和配置一個輕量級HTTP服務器。 安裝 HTTP::Server::Simple 首先&…

在AI技術深度滲透的背景下,2025年傳媒互聯網行業的哪些細分場景和產品形態將迎來爆發式增長?

一、AI技術重構傳媒互聯網行業版圖&#xff1a;從底層邏輯到應用場景 近年來&#xff0c;AI技術已從實驗室走向商業化落地&#xff0c;而傳媒互聯網行業因其龐大的用戶基數、高頻交互場景和豐富的數據積累&#xff0c;成為AI應用的主戰場。根據華源證券最新行業周報&#xff0…

Docker Hub 鏡像 Pull 失敗的解決方案

目錄 引言一、問題二、原因三、解決方法四、參考文獻 引言 在云原生技術火熱的當下&#xff0c;Docker可謂是其基礎&#xff0c;由于其簡單以及方便性&#xff0c;讓開發人員不必再為環境配置問題而傷腦筋&#xff0c;因為可將其看作一個虛擬機程序去理解。所以掌握好它可謂是…

neo4j-community-5.26.0 create new database

1.edit neo4j.conf 把 # The name of the default database initial.dbms.default_databasehonglouneo4j # 寫上自己的數據庫名稱 和 # Name of the service #5.0 server.windows_service_nameneo4j #4.0 dbms.default_databaseneo4j #dbms.default_databaseneo4jwind serve…

unity實現回旋鏢函數

最近學習unity2D&#xff0c;想實現一個回旋鏢武器&#xff0c;發出后就可以在角色周圍回旋。 一、目標 1.不是一次性的&#xff0c;扔出去、返回、沒有了&#xff1b;而是扔出去&#xff0c;返回到角色后方相同距離&#xff0c;再次返回&#xff1b;再次返回&#xff0c;永遠…

【C++基礎】字符串/字符讀取函數解析

最近在學C以及STL&#xff0c;打個基礎 參考&#xff1a; c中的char[] ,char* ,string三種字符串變量轉化的兼容原則 c讀取字符串和字符的6種函數 字符串結構 首先明確三種字符串結構的兼容關系&#xff1a;string>char*>char [] string最靈活&#xff0c;內置增刪查改…

求一個數的數根(高精度)

上一期我們講的是求一個數的數根&#xff0c;和本期唯一不同的是&#xff0c;數據范圍不同了&#xff0c;上一期這個數是小于等于10的18次方的&#xff0c;這一期是小于等于10的1000次方的&#xff0c;開一個變量&#xff1f;肯定不行&#xff0c;我們需要再開一個數組&#xf…

SpringBoot源碼解析(九):Bean定義接口體系

SpringBoot源碼系列文章 SpringBoot源碼解析(一)&#xff1a;SpringApplication構造方法 SpringBoot源碼解析(二)&#xff1a;引導上下文DefaultBootstrapContext SpringBoot源碼解析(三)&#xff1a;啟動開始階段 SpringBoot源碼解析(四)&#xff1a;解析應用參數args Sp…

Vue 3 30天精進之旅:Day 13 - 路由守衛

在構建單頁面應用時&#xff0c;路由守衛是一個非常重要的概念。它允許我們在路由進入或離開時執行一些操作&#xff0c;比如驗證用戶權限、處理數據加載、執行導航確認等。Vue Router提供了多種類型的路由守衛&#xff0c;使我們能夠靈活地控制路由的行為。在今天的學習中&…

【TypeScript】基礎:數據類型

文章目錄 TypeScript一、簡介二、類型聲明三、數據類型anyunknownnervervoidobjecttupleenumType一些特殊情況 TypeScript 是JavaScript的超集&#xff0c;代碼量比JavaScript復雜、繁多&#xff1b;但是結構更清晰 一、簡介 為什么需要TypeScript&#xff1f; JavaScript的…

C++模板編程——可變參函數模板

目錄 1. 可變參函數模板基本介紹 2. 參數包展開——通過遞歸函數 3. 參數包展開——通過編譯期間if語句(constexpr if) 4. 重載 5. 后記 進來看的小伙伴們應該對C中的模板有了一定了解&#xff0c;下面給大家介紹一下可變參函數模板。過于基礎的概念將不仔細介紹。 1. 可變…

ChatGPT-4o和ChatGPT-4o mini的差異點

在人工智能領域&#xff0c;OpenAI再次引領創新潮流&#xff0c;近日正式發布了其最新模型——ChatGPT-4o及其經濟實惠的小型版本ChatGPT-4o Mini。這兩款模型雖同屬于ChatGPT系列&#xff0c;但在性能、應用場景及成本上展現出顯著的差異。本文將通過圖文并茂的方式&#xff0…

三數之和(15)

15. 三數之和 - 力扣&#xff08;LeetCode&#xff09; 可以一起總結的題目&#xff1a;三角形的最大周長&#xff08;976&#xff09;-CSDN博客 解法&#xff1a; class Solution { public:vector<vector<int>> threeSum(vector<int>& nums) {vector…

2025最新源支付V7全套開源版+Mac云端+五合一云端

2025最新源支付V7全套開源版Mac云端五合一云端 官方1999元&#xff0c; 最新非網上那種功能不全帶BUG開源版&#xff0c;可以自己增加授權或二開 擁有卓越的性能和豐富的功能。它采用全新輕量化的界面UI&#xff0c;讓您能更方便快捷地解決知識付費和運營贊助的難題 它基于…

9 點結構模塊(point.rs)

一、point.rs源碼 use super::UnknownUnit; use crate::approxeq::ApproxEq; use crate::approxord::{max, min}; use crate::length::Length; use crate::num::*; use crate::scale::Scale; use crate::size::{Size2D, Size3D}; use crate::vector::{vec2, vec3, Vector2D, V…

數據分析系列--[12] RapidMiner辨別分析(含數據集)

一、數據準備 二、導入數據 三、數據預處理 四、建模辨別分析 五、導入測試集進行辨別分析 一、數據準備 點擊下載數據集 二、導入數據 三、數據預處理 四、建模辨別分析 五、導入測試集進行辨別分析 Ending, congratulations, youre done.

Day33【AI思考】-函數求導過程 的優質工具和網站

文章目錄 **函數求導過程** 的優質工具和網站**一、動態圖形工具**1. **Desmos&#xff08;網頁端&#xff09;**2. **GeoGebra&#xff08;全平臺&#xff09;** **二、分步推導工具**3. **Wolfram Alpha&#xff08;網頁/App&#xff09;**4. **Symbolab&#xff08;網頁/App…

個人筆記(很沒營養,純備忘錄)

1.輸入電阻和輸出電阻指在一個可劃分為3部分的電路中&#xff0c;中間部分電路相當于前面電路的負載有輸入端電阻&#xff0c;稱輸入電阻&#xff0c;相對于后面部分等效為電源有輸出端內阻&#xff0c;稱輸出電阻 理所當然的希望輸出電阻對負載影響小&#xff0c;輸入電阻能完…

當卷積神經網絡遇上AI編譯器:TVM自動調優深度解析

從銅線到指令&#xff1a;硬件如何"消化"卷積 在深度學習的世界里&#xff0c;卷積層就像人體中的毛細血管——數量龐大且至關重要。但鮮有人知&#xff0c;一個簡單的3x3卷積在CPU上的執行路徑&#xff0c;堪比北京地鐵線路圖般復雜。 卷積的數學本質 對于輸入張…

51單片機 02 獨立按鍵

一、獨立按鍵控制LED亮滅 輕觸按鍵&#xff1a;相當于是一種電子開關&#xff0c;按下時開關接通&#xff0c;松開時開關斷開&#xff0c;實現原理是通過輕觸按鍵內部的金屬彈片受力彈動來實現接通和斷開。 #include <STC89C5xRC.H> void main() { // P20xFE;while(1){…