Untitled
unknown
plain_text
2 years ago
2.9 kB
8
Indexable
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
int n, m, sr, sc;
int fire, lake, out;
int firex[100], firey[100];
int lakex[100], lakey[100];
int outx[100], outy[100];
int kimcuong[100][100];
int front = -1;
int rear = -1;
int Qx[10000000], Qy[10000000];
int dx[4] = { 0,1,0,-1 };
int dy[4] = { 1,0,-1,0 };
int vs_fire[100][100];
int vs_out[100][100];
int ans;
int vs_hugo[100][100];
void doc()
{
cin >> n >> m >> sr >> sc;
//reset bien
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
{
vs_fire[i][j] = -1;
vs_out[i][j] = 0;
kimcuong[i][j] = 0;
vs_hugo[i][j] = -1;
}
ans = 0;
vs_hugo[sr][sc] = 0;
//doc dam chay
cin >> fire;
for (int i = 1; i <= fire; i++)
{
cin >> firex[i] >> firey[i];
vs_fire[firex[i]][firey[i]] = 0;
}
//doc ho
cin >> lake;
for (int i = 1; i <= lake; i++)
{
cin >> lakex[i] >> lakey[i];
vs_fire[lakex[i]][lakey[i]] = -2;
}
//doc loi ra
cin >> out;
for (int i = 1; i <= out; i++)
{
cin >> outx[i] >> outy[i];
vs_out[outx[i]][outy[i]] = 1;
}
//doc mang kim cuong
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++) cin >> kimcuong[i][j];
}
bool checkbien(int x, int y)
{
if (x<1 || x>n || y <1 || y>m) return false;
return true;
}
void push(int x, int y)
{
rear++;
Qx[rear] = x;
Qy[rear] = y;
}
void pop(int& x, int& y)
{
front++;
x = Qx[front];
y = Qy[front];
}
void Bfs_fire()
{
front = rear = -1;
for (int i = 1; i <= fire; i++) push(firex[i], firey[i]);
int x, y;
while (front != rear)
{
pop(x, y);
for (int i = 0; i < 4; i++)
{
int xx = x + dx[i];
int yy = y + dy[i];
if (checkbien(xx, yy))
{
if (vs_fire[xx][yy] == -1)
{
push(xx, yy);
vs_fire[xx][yy] = vs_fire[x][y] + 1;
}
}
}
}
}
void Backtrack_hugo(int x, int y, int sum)
{
if (vs_hugo[x][y] >= vs_fire[x][y] && vs_fire[x][y] > -1) return;
if (ans < sum)
{
if (vs_out[x][y] == 1) ans = sum;
}
for (int i = 0; i < 4; i++)
{
if (checkbien(x+dx[i], y+dy[i]) && vs_hugo[x + dx[i]][y + dy[i]] == -1)
{
if(vs_fire[x][y] == -2)
{
vs_hugo[x + dx[i]][y + dy[i]] = vs_hugo[x][y] + 2;
Backtrack_hugo(x + dx[i], y + dy[i], sum + kimcuong[x + dx[i]][y + dy[i]]);
vs_hugo[x + dx[i]][y + dy[i]] = -1;
}
else
{
vs_hugo[x + dx[i]][y + dy[i]] = vs_hugo[x][y] + 1;
Backtrack_hugo(x + dx[i], y + dy[i], sum + kimcuong[x + dx[i]][y + dy[i]]);
vs_hugo[x + dx[i]][y + dy[i]] = -1;
}
}
}
}
int main()
{
freopen("input.txt", "r", stdin);
int t;
cin >> t;
for (int tc = 1; tc <= t; tc ++)
{
doc();
Bfs_fire();
Backtrack_hugo(sr, sc, kimcuong[sr][sc]);
if (ans == 0) ans = -1;
cout << "Case #" << tc << endl;
cout << ans << endl;
}
}Editor is loading...