百度之星初赛(2)—BFS小试牛刀 problem 1002 占领棋盘
来源:互联网 发布:软件二次开发申请专利 编辑:程序博客网 时间:2024/06/06 05:15
//利用队列实现宽度优先搜索算法。
//其中,本题转换思维,若被占领的城市的对角有城市 即2x2的方格内,其余两个城市被占领,被占领的城市入队,当队列为空时就得到的解,宽度优先搜索算法
#include <iostream>
#include <vector>
#include <queue>
#include <set>
using namespace std;
const int n_max = 500;
const int m_max = 500;
int m, n;
int a[n_max][m_max];
const int dx[4] = { -1, -1, 1, 1 };
const int dy[4] = { -1, 1, 1, -1 };
queue<pair<int, int>> s;
int main()
{
int GetOccupynum(int x, int y);
int T = 0;
cin >> T;
for (int i = 0; i < T; i++)
{
int count = 0;
cin >> n >> m;
int g;
cin >> g;
for (int i = 1; i < n + 1; i++)
{
for (int j = 1; j < m + 1; j++)
a[i][j] = 0;
}
memset(a, 0, sizeof (a));
for (int i = 0; i < g; i++)
{
pair<int, int> p;
cin >>p.first>>p.second;
a[p.first][p.second] = 1;
s.push(p);
}
while (!s.empty())
{
int x = s.front().first;
int y = s.front().second;
s.pop();
count+=GetOccupynum(x, y);
}
cout << "Case #" << i + 1 <<":"<< "\n" << count + g << endl;
count = 0;
}
system("pause");
return 0;
}
int GetOccupynum(int x, int y)
{
int cnt = 0;
for (int i = 0; i < 4; i++)
{
int temp_x = x + dx[i];
int temp_y = y + dy[i];
if ((0 < temp_x < n + 1) && (0 < temp_y < m + 1))
{
if (a[temp_x][temp_y] == 1)
{
if (a[temp_x][y] == 0)
{
a[temp_x][y] = 1;
cnt++;
s.push(make_pair(temp_x, y));
}
if (a[x][temp_y] == 0)
{
a[x][temp_y] = 1;
cnt++;
s.push(make_pair(x, temp_y));
}
}
}
else
{
continue;
}
}
return cnt;
}
//void solve1()
//{
// const int n_max = 500;
// const int m_max = 500;
// int a[n_max + 1][m_max + 1] = { 0 };
// int di[4] = { -1, 0, 1, 0 };
// int T = 0;
// cin >> T;
// for (int i = 0; i < T; i++)
// {
// int m, n;
// cin >> m >> n;
// int g;
// cin >> g;
// for (int i = 0; i < g; i++)
// {
// int x, y;
// cin >> x >> y;
// a[x][y] = 1;
//
// }
// int g_other = 0;
// int flag = 0;
// for (int i = 1; i < m + 1; i++)
// {
//
// for (int j = 1; j < n + 1; j++)
// {
//
// if (a[i][j] == 0)
// {
// for (int k = 0; k < 4; k++)
// {
//
// if (0 < (i + di[k]) <= m && 0 < j + di[3 - k] <= n)
// {
// if (a[i + di[k]][j + di[3 - k]] == 1)
// flag++;
// }
// }
// if (flag > 2)
// g_other++;
// if (flag == 2)
// {
// if ((a[i + 1][j] == 1 && a[i - 1][j] == 1) || (a[i][j + 1] == 1 && a[i][j - 1] == 1))
// flag = 0;
// else
// g_other++;
//
// }
// flag = 0;
//
// }
// }
//
// }
// cout << "Case #" << i + 1 << endl;
// cout << g_other + g << endl;
//
//
// }
//}
- 百度之星初赛(2)—BFS小试牛刀 problem 1002 占领棋盘
- 百度之星初赛2 棋盘占领
- 2015 百度之星 初赛2 1003 棋盘占领 (bfs)题解
- HDU 5254 棋盘占领(百度之星初赛2)
- 2015百度之星初赛(2)棋盘占领 递归
- 百度之星 2015 初赛(2) 1003 棋盘占领
- 【百度之星初赛2】棋盘占领(深搜|广搜)
- hdu 5254 棋盘占领(百度之星2015初赛2 1003)暴力模拟
- [DFS]百度之星初赛第二场 棋盘占领
- 【HDU】5254 棋盘占领(BFS)
- 2017百度之星初赛(A) 度度熊的01世界(BFS/DFS)
- 百度之星初赛(A) 1 数学 5 模拟 6 判连通(BFS)
- 百度之星初赛(A)--度度熊的01世界----bfs搜索
- 百度之星初赛1002(二分搜索)
- 2015百度之星 初赛1 1002(rmq)
- 2016"百度之星" - 初赛(Astar Round2A) 1002
- 百度之星初赛B 1002 Factory
- 2007百度之星初赛题目(2)
- POJ 1017-Packets
- javaSE(hello,world)(二)
- 优化Mysql的运行环境(Linux)
- nginx discuz 伪静态rewrite规则
- hdu 3033 I love sneakers!(分组背包)
- 百度之星初赛(2)—BFS小试牛刀 problem 1002 占领棋盘
- java中HashMap详解
- socket 编程实例
- 实现atoi函数
- 页面静态化用memcache的思想去实现,会是什么效果那??
- kafka创建分区
- java ClassLoader 原理详细分析
- 并行 跑Junit
- 聊天工具 客户端