下象棋,DFS暴搜就行
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <queue>
#include <cstring>
#include <vector>
#include <set>
#include <stack>
using namespace std;
#define ll long long
#define maxn 100005
int N, M, Q;
char grid[5][5];
int ans = 0;
void print()
{
for (int i = 0; i < N; ++i)
{
for (int j = 0; j < M; ++j)
{
if (grid[i][j] == 0)
printf("0 ");
else
printf("%c ", grid[i][j]);
}
printf("\n");
}
printf("\n");
}
void DFS(int x, int y,int sum)
{
if (grid[x][y] != 0)
{
if (x == N - 1 && y == M - 1)
{
//printf("last sum %d\n", sum);
ans = max(ans, sum);
}
else if (y == M - 1)
DFS(x + 1, 0, sum);
else
DFS(x, y + 1, sum);
}
else
{
bool canput = true;
grid[x][y] = '2';
for (int m = 0; m < M; ++m)
{
for (int n = 0; n < N; ++n)
{
if (grid[m][n] != '2')
continue;
int row1 = 0, column1 = 0, row2 = 0, column2 = 0;
for (int i = m - 1; i >= 0; --i)
{
if (grid[i][n] == '1')
{
column1++;
}
else if (grid[i][n] == '2')
{
if (column1 == 1)
{
canput = false;
break;
}
else if (column1 == 0)
{
column1++;
}
else
{
break;
}
}
}
if (canput)
{
for (int i = m + 1; i < M; ++i)
{
if (grid[i][n] == '1')
{
column2++;
}
else if (grid[i][n] == '2')
{
if (column2 == 1)
{
canput = false;
break;
}
else if (column2 == 0)
{
column2++;
}
else
{
break;
}
}
}
}
if (canput)
{
for (int i = n - 1; i >= 0; --i)
{
if (grid[m][i] == '1')
{
row1++;
}
else if (grid[m][i] == '2')
{
if (row1 == 1)
{
canput = false;
break;
}
else if (row1 == 0)
{
row1++;
}
else
{
break;
}
}
}
}
if (canput)
{
for (int i = n + 1; i < N; ++i)
{
if (grid[m][i] == '1')
{
row2++;
}
else if (grid[m][i] == '2')
{
if (row2 == 1)
{
canput = false;
break;
}
else if (row2 == 0)
{
row2++;
}
else
{
break;
}
}
}
}
if (canput == false)
break;
}
if (canput == false)
break;
}
grid[x][y] = 0;
if (canput)
{
//printf("%d %d %d\n", x, y, sum);
if (x == N - 1 && y == M - 1)
{
grid[x][y] = '2';
ans = max(ans, sum + 1);
//printf("not last sum %d\n", sum + 1);
grid[x][y] = 0;
}
else if (y == M - 1)
{
DFS(x + 1, 0, sum);
grid[x][y] = '2';
DFS(x + 1, 0, sum + 1);
grid[x][y] = 0;
}
else
{
DFS(x, y + 1, sum);
grid[x][y] = '2';
DFS(x, y + 1, sum + 1);
grid[x][y] = 0;
}
}
else
{
if (x == N - 1 && y == M - 1)
{
ans = max(ans, sum);
}
else if (y == M - 1)
{
DFS(x + 1, 0, sum);
}
else
{
DFS(x, y + 1, sum);
}
}
}
}
int main()
{
//freopen("input.txt", "r", stdin);
//freopen("output.txt", "w", stdout);
int x, y;
while (scanf("%d%d%d", &N, &M, &Q) != EOF)
{
ans = 0;
memset(grid, 0, sizeof(grid));
for (int i = 0; i < Q; ++i)
{
scanf("%d%d", &x, &y);
grid[x][y] = '1';
}
DFS(0, 0, 0);
printf("%d\n", ans);
}
//system("pause");
//while (1);
return 0;
}