您的位置:首页 > 其它

Ural 1033

2010-12-01 16:21 288 查看
题意:求游客进入迷宫能看到的墙的面积

WA点:注意两个入口可能不连通,所以两边都要搜索

代码:

//============================================================================
// Name        : Test.cpp
// Author      :
// Version     :
// Copyright   : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================
#include <iostream>
#include <cstdio>
using namespace std;
char a[36][36];
int n;
int b[36][36];
int dx[] = { 1, 0, -1, 0 };
int dy[] = { 0, -1, 0, 1 };
bool vis[36][36];
bool isOK(int i, int j) {
return i > 0 && i <= n && j > 0 && j <= n && a[i][j] == '.';
}
void DFS(int i, int j) {
//	if(!isOK(i,j))
//		return;
if (vis[i][j])
return;
vis[i][j] = true;
int tx, ty;
for (int w = 0; w < 4; w++) {
tx = j + dx[w];
ty = i + dy[w];
//cout << "tx = " << tx << " ty = " << ty << endl;
if (isOK(ty, tx)) {
DFS(ty, tx);
} else
b[i][j]++;
}
}
int main() {
cin >> n;
getchar();
for (int i = 1; i <= n; i++, getchar()) {
for (int j = 1; j <= n; j++)
a[i][j] = getchar();
}
//cout << "****" << endl;
DFS(n, n);
//	cout << "****" << endl;
//	for (int i = 1; i <= n; i++) {
//		for (int j = 1; j <= n; j++)
//			cout << b[i][j];
//		cout << endl;
//	}
int sum = 0;
if (!vis[1][1]) {
DFS(1, 1);
}
sum -= 4;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++)
sum += b[i][j];
}
//cout << "sum = "  << sum<< endl;
cout << sum * 9 << endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: