我是啥乱,考试的时候把返回条件写错了!!!又白给5分!放在这里警戒自己
#include <bits/stdc++.h>
using namespace std;
char mp[6][6];
int res = 0;
bool check()
{
int cnt_0 = 0, cnt_1 = 0;
for (int i = 1; i <= 5; i++)
for (int j = 1; j <= 5; j++)
{
if (i == 1 && j == 1)
{
bool flag = 1;
for (int k = 2; k <= 5; k++)
{
if (mp[k][k] != mp[1][1])
{
flag = 0;
break;
}
}
if (flag)
return false;
}
if (i == 1 && j == 5)
{
bool flag = 1;
for (int k = 2; k <= 5; k++)
{
if (mp[k][5 - k + 1] != mp[1][5])
{
flag = 0;
break;
}
}
if (flag)
return false;
}
if (i == 1)
{
bool flag = 1;
for (int k = 2; k <= 5; k++)
{
if (mp[k][j] != mp[1][j])
{
flag = 0;
break;
}
}
if (flag)
return false;
}
if (j == 1)
{
bool flag = 1;
for (int k = 2; k <= 5; k++)
{
if (mp[i][k] != mp[i][1])
{
flag = 0;
break;
}
}
if (flag)
return false;
}
if (mp[i][j] == '0')
cnt_0++;
else
cnt_1++;
}
if (cnt_0 != 13)
return false;
return true;
}
void dfs(int x, int y)
{
if (x == 6)//就是这里!越想越气喵!
{
if (check())
{
res++;
}
return;
}
if (y < 5)
{
mp[x][y] = '0';
dfs(x, y + 1);
mp[x][y] = '1';
dfs(x, y + 1);
}
else
{
mp[x][y] = '0';
dfs(x + 1, 1);
mp[x][y] = '1';
dfs(x + 1, 1);
}
}
int main()
{
dfs(1, 1);
cout << res << endl;
return 0;
}
真是的,花钱买教训吧