标签:
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 8620 Accepted Submission(s):
4976
#include <cstdio> #include <cstring> using namespace std; char Ap[5][5]; int Gra[5][5], vis[5], dis[5]; int dx[5], dy[5], left[5], right[5]; int n; struct Node{ int x, y; }a[5][5]; void Printf(){ for(int i = 0; i < n; i++){ for(int j = 0; j < n; j++){ printf("%c", Ap[i][j]); } printf("\n"); } } int x, y; bool Search(int a){ for(int i = 1; i <= y; i++){ if(Gra[a][i] && !vis[i]){ vis[i] = 1; if(!dis[i] || Search(dis[i])){ dis[i] = a; return true; } } } return false; } int main(){ while(scanf("%d", &n) != EOF && n){ for(int i = 0; i < n; i++) { getchar(); for(int j = 0; j < n; j++) scanf("%c", &Ap[i][j]); } x = y = 0; for(int i = 0; i < n; i++) //行列匹配; for(int j = 0; j < n; j++) { if(Ap[i][j] == ‘.‘) { if(j == 0 || Ap[i][j-1] == ‘X‘){ x++; /***********************/ } a[i][j].x = x; } if(Ap[j][i] == ‘.‘) { if(j == 0 || Ap[j-1][i] == ‘X‘){ y++; /***********************/ } a[j][i].y = y; } } memset(Gra, 0, sizeof(Gra)); for(int i = 0; i < n; i++) for(int j = 0; j < n; j++){ if(Ap[i][j] == ‘.‘){ int u = a[i][j].x; int v = a[i][j].y; Gra[u][v] = 1; } } int ans = 0; memset(dis, 0, sizeof(dis)); for(int i = 1; i <= x; i++) { memset(vis, 0, sizeof(vis)); if(Search(i)) ans++; } printf("%d\n", ans); } return 0; }
暴搜;
#include <cstdio> int n, cnt; char map[5][5]; bool Build(int row, int col){ int i, j; for(int i = row; i >= 0; i--){ if(map[i][col] == ‘O‘) return false; if(map[i][col] == ‘X‘) break; } for(int i = col; i >= 0; i--){ if(map[row][i] == ‘O‘) return false; if(map[row][i] == ‘X‘) break; } return true ; } void Dfs(int i, int num){ if(i == n*n){ // printf("%d %d\n", i, num); if(num > cnt) cnt = num; return; } else{ int row = i / n; int col = i % n; if(map[row][col] == ‘.‘ && Build(row, col)){ map[row][col] = ‘O‘; Dfs(i+1, num+1); map[row][col] = ‘.‘; } Dfs(i+1, num); } } int main(){ while(scanf("%d", &n), n){ cnt = 0; for(int i = 0; i < n; i++) scanf("%s", map[i]); Dfs(0, 0); printf("%d\n", cnt); } return 0; }
标签:
原文地址:http://www.cnblogs.com/fengshun/p/5063031.html