藍橋杯2015決賽]四階幻方
萬萬沒想到能拿到省一,以為第一次能拿個省二就不錯了,有些意外。。。
那麼就從此題再次開啟我的藍橋杯刷題之旅把!!!
#include<bits/stdc++.h>
using namespace std;
#define ll long long
int q[18][18];
int vis[18];
int ans=0;
bool get_sum(int i) ///求第i行的和
{
int sum=0;
for(int j=0; j<4; j++)
{
sum+=q[i][j];
}
if(sum!=34) return 0;
return 1;
}
bool check()
{
int sum=0;
sum=q[1][1]+q[2][2]+q[3][3]+q[0][0]; ///對角線1
if(sum!=34) return 0;
sum=q[0][3]+q[1][2]+q[2][1]+q[3][0];///對角線2
if(sum!=34) return 0;
for(int i=0; i<4; i++) /// 行
{
if(get_sum(i)==0)
{
return 0;
}
}
for(int j=0; j<4; j++) ///列
{
sum=q[1][j]+q[2][j]+q[3][j]+q[0][j];
if(sum!=34) return 0;
}
return 1;
}
void dfs(int step)
{
if(step==16)
{
if(check())
{
ans++;
}
return ;
}
if(step%4==0)
{
if(get_sum(step/4-1)==0)
{
return ;
}
}
for(int i=2; i<=16; i++)
{
if(vis[i]==0)
{
vis[i]=1;
int x=step/4;
int y=step%4;
q[x][y]=i;
dfs(step+1);
vis[i]=0;
}
}
}
int main()
{
memset(vis,0,sizeof(vis));
q[0][0]=1;
dfs(1);
printf("%d\n",ans);
//printf("416\n");
return 0;
}
相關文章
- 藍橋杯-四平方和
- 藍橋杯2015初賽生命之樹 DFS圖解圖解
- [藍橋杯2018決賽]最大乘積
- 2015藍橋杯省賽javaA組-----牌型種數(填空)Java
- 【計蒜客】2017藍橋杯模擬賽(四)
- 2015年藍橋杯六屆省賽大學B組真題
- 藍橋杯javaB組備賽Java
- 1303: [藍橋杯2016決賽]路徑之謎
- 2018藍橋杯省賽B組
- 2017省賽藍橋杯B組
- 藍橋杯大賽——驅動程式
- 藍橋杯
- 藍橋杯 (java) 第39級階梯Java
- 第14屆藍橋杯B組國賽
- 藍橋杯第9場小白入門賽
- 第十三屆藍橋杯省賽A組
- 藍橋杯省賽真題2013題解
- 2020藍橋杯競賽複習指導
- 2016年藍橋杯C/C++組省賽第四題--快速排序C++排序
- [藍橋杯][2015年第六屆真題] 移動距離
- 藍橋杯 買瓜
- 藍橋杯-分巧克力
- 藍橋杯-N皇后
- 藍橋杯真題
- 藍橋杯 剪格子
- 【藍橋杯考前突擊】第十一屆藍橋杯校賽模擬C/C++ 正整數序列C++
- 2013第四屆藍橋杯省賽C++A組【第一題:高斯日記】C++
- 2016藍橋杯省賽第七題剪郵票
- 第六屆藍橋杯省賽CC++B組C++
- 藍橋杯-長草(BFS)
- 藍橋杯-螞蟻感冒
- 藍橋杯-帶分數
- 藍橋杯-翻硬幣
- 藍橋杯-座次問題
- 藍橋杯-日期問題
- 藍橋杯 計算方程
- 藍橋杯-排列序數
- 如何準備藍橋杯