题意:求游客进入迷宫能看到的墙的面积 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; }