标签:
Description
Input
Output
Sample Input
input | output |
---|---|
5 ..... ...## ..#.. ..### ..... |
198 |
dfs稍微注意一下,两个入口不一定想通,所以需要从两个入口分别进行dfs
#include<stdio.h> #include<string.h> #include<iostream> #include<algorithm> using namespace std; const int maxn=100; char map[maxn][maxn]; bool vis[maxn][maxn]; int nxt[4][2]={1,0,0,1,0,-1,-1,0}; int sum; int n; int dfs(int x,int y){ vis[x][y]=true; for(int i=0;i<=3;i++){ int xx=x+nxt[i][0]; int yy=y+nxt[i][1]; if(map[xx][yy]==‘#‘){ sum++; // printf("-------->%d\n",sum); // printf("---->%d %d\n",xx,yy); } } for(int i=0;i<=3;i++){ int tx=x+nxt[i][0]; int ty=y+nxt[i][1]; if(tx<1||tx>n||ty<1||ty>n||vis[tx][ty]) continue; if(map[tx][ty]==‘.‘){ vis[tx][ty]=true; dfs(tx,ty); } } return sum; } int main(){ while(scanf("%d",&n)!=EOF){ memset(map,0,sizeof(map)); memset(vis,false,sizeof(vis)); getchar(); for(int i=1;i<=n;i++){ scanf("%s",map[i]+1); getchar(); } for(int i=2;i<=n+1;i++){ map[0][i]=‘#‘; map[i][0]=‘#‘; } for(int i=0;i<=n-1;i++){ map[n+1][i]=‘#‘; map[i][n+1]=‘#‘; } map[0][0]=‘.‘; map[0][1]=‘.‘; map[1][0]=‘.‘; map[n+1][n+1]=‘.‘; map[n+1][n]=‘.‘; map[n][n+1]=‘.‘; vis[0][0]=true; vis[0][1]=true; vis[1][0]=true; vis[n+1][n+1]=true; vis[n+1][n]=true; vis[n][n+1]=true; int ans=0; sum=0; ans+=dfs(1,1); sum=0; if(!vis[n][n]) ans+=dfs(n,n); printf("%d\n", ans*9); } return 0; }
标签:
原文地址:http://www.cnblogs.com/13224ACMer/p/4836378.html