Water problem, direct sticker code.
POJ 1164//sep9#include <iostream>using namespace std;int a[64][64];int dp[64][64];int n,m;const int west=1, north=2,east=4,south=8;void dfs (int x,int y) {dp[x][y]=1;if ((A[x][y]&north) ==0&&dp[x-1][y]==-1) {DFS ( X-1,y);DP [x][y]+=dp[x-1][y];} if ((A[x][y]&south) ==0&&dp[x+1][y]==-1) {DFS (x+1,y);DP [x][y]+=dp[x+1][y];} if ((a[x][y]&west) ==0&&dp[x][y-1]==-1) {DFS (x,y-1);DP [x][y]+=dp[x][y-1];} if ((a[x][y]&east) ==0&&dp[x][y+1]==-1) {DFS (x,y+1);DP [x][y]+=dp[x][y+1];} return;} int main () {scanf ("%d%d", &n,&m), int i,j;for (i=1;i<=n;++i) for (j=1;j<=m;++j) scanf ("%d", &a[i][j]); Memset (Dp,-1,sizeof (DP)); int room_num=0,max_room=1;for (i=1;i<=n;++i) for (j=1;j<=m;++j) if (dp[i][j]==-1) {+ +) Room_num;dfs (I,J); Max_room=max (Max_room,dp[i][j]);} printf ("%d\n%d\n", Room_num,max_room); return 0;}
POJ 1164 the Castle DP area count water problem