hdu4770Lights Against Dudely 暴力搜索

;const int maxn = 210 ;char map[maxn][maxn] ;int vis[maxn][maxn] ;int x[maxn] , y[maxn] ;int len_a ,a[maxn];int ans ;int len ;int dx[4][3] = {{0,-1,0},{0,0,1},{0,1,0},{0,0,-1}};int dy[4][3] = {{0,0,1},{0,1,0},{0,0,-1},{0,-1,0}};bool judge(){int hash[20] ;for(int i = 1;i <= len_a ;i++)for(int j = 0;j < 4;j++){memset(hash , 0 , sizeof(hash)) ;int flag = 0 ;for(int k = 0;k < 3;k++){int u = x[a[i]] + dx[j][k] ;int v = y[a[i]] + dy[j][k] ;hash[vis[u][v]] = 1 ;if(map[u][v] == ‘#’){flag = 1 ; break;}}if(flag)continue ;for(int k = 1;k <= len_a ;k++){if(k == i)continue ;flag = 0 ;for(int s = 0 ;s < 3;s++){int u = x[a[k]] + dx[0][s] ;int v = y[a[k]] + dy[0][s] ;hash[vis[u][v]] = 1;if(map[u][v] == ‘#’){flag = 1 ; break;}}if(flag){flag = 1 ;break;}}if(flag)continue;for(int k = 1;k <= len ;k++)if(!hash[k]){flag = 1 ; break;}if(!flag)return true ;}return false ;}void dfs(int pos , int num){if(pos == len + 1 ){if(judge())ans = min(ans , num) ;return ;}dfs(pos + 1, num) ;a[++len_a] = pos ;dfs(pos+1 , num + 1) ;len_a–;}int main(){//freopen(“in.txt” ,”r” , stdin) ;int n , m ;while(~scanf(“%d%d” ,&n , &m)&&(n+m)){len = 0;memset(vis , 0 , sizeof(vis)) ;memset(map , 0 ,sizeof(map)) ;for(int i = 1;i <= n;i++){scanf(“%s” , &map[i][1]) ;for(int j = 1;j <= m;j++)if(map[i][j] == ‘.’)x[++len] = i ,y[len] = j , vis[i][j] = len ;}if(len == 0){puts(“0”);continue ;}ans = 20;len_a = 0 ;dfs(1 ,0);if(ans==20)puts(“-1”) ;elseprintf(“%d\n” ,ans) ;}return 0 ;}

,有理想在的地方,地狱就是天堂

hdu4770Lights Against Dudely 暴力搜索

相关文章:

你感兴趣的文章:

标签云: