ural 1033. Labyrinth

和轻工校赛第一题基本一摸一样。。。昨晚和党btw翻题的时候发现的。。。我们表示。。。无语。。。

 

从左上角和右下角搜下,如果搜超界还有碰到#,sum++即可~最后sum-4去掉两个点的门,最后*9(题目要求的,恩。。)

 

#include <queue> #include <stack> #include <math.h> #include <stdio.h> #include <stdlib.h> #include <iostream> #include <limits.h> #include <string.h> #include <algorithm> using namespace std; const int MAX = 40; int n; char map[MAX][MAX]; bool used[MAX][MAX]; int sum; int dir[8] = {0,1,0,-1,-1,0,1,0}; bool check(int x,int y) { return x >= 0 && x < n && y >= 0 && y < n; } void DFS(int x,int y) { used[x][y] = 1; for(int i=0; i<8; i+=2) { int a = x + dir[i]; int b = y + dir[i+1]; if( !check(a,b) || map[a][b] == '#' ) sum++; else if( check(a,b) && !used[a][b] && map[a][b] != '#' ) DFS(a,b); } } int main() { scanf("%d",&n); for(int i=0; i<n; i++) scanf("%s", map[i]); sum = 0; memset(used,0,sizeof(used)); DFS(0,0); if( !used[n-1][n-1] ) DFS(n-1,n-1); printf("%d/n",(sum-4)*9); return 0; }  

你可能感兴趣的:(ural 1033. Labyrinth)