1 solutions
-
0
C++ :
#include<stdio.h> #include<string.h> char a[6][6]; int b[6][6]; int all; int n; int max(int as,int ad) { if (as>ad) return as; else return ad; } int min(int as,int ad) { if (as<ad) return as; else return ad; } int check(int x,int y) { int xx=1; for (int i=x;i<(min(n,x+2));i++) { if (b[i][y]==2&&i!=x) break; if (b[i][y]==1||b[x][y]==2) {xx=0;break;} } for (int i=x;i>=max(x-2,0);i--) { if (b[i][y]==2) break; if (b[i][y]==1) {xx=0;break;} } for (int i=y;i<min(y+2,n);i++) { if (b[x][i]==2&&i!=y) break; if (b[x][i]==1||b[x][y]==2) {xx=0;break;} } for (int i=y;i>=max(y-2,0);i--) { if (b[x][i]==2) break; if (b[x][i]==1) {xx=0;break;} } return xx; } void dfs(int kk,int x,int y) { if (kk>all) all=kk; for (int i=y+1;i<n;i++) { //printf("(%d,%d)=%d\n",x,i,b[x][i]); if (check(x,i)) { b[x][i]=1; dfs(kk+1,x,i); b[x][i]=0; } } for (int i=x+1;i<n;i++) { for (int j=0;j<n;j++) { //printf("(%d,%d)=%d\n",i,j,b[i][j]); if (check(i,j)) { b[i][j]=1; dfs(kk+1,i,j); b[i][j]=0; } } } } int main() { while(scanf("%d",&n)!=EOF&&n!=0) { getchar(); memset(b,0,sizeof(b)); for (int i=0;i<n;i++) { for (int j=0;j<n;j++) { scanf("%c",&a[i][j]); if (a[i][j]=='X') b[i][j]=2; } getchar(); } all=0; for (int i=0;i<n;i++) { for (int j=0;j<n;j++) { if (check(i,j)) { b[i][j]=1; int sum=1; dfs(sum,i,j); b[i][j]=0; } } } printf("%d\n",all); } return 0; }
- 1
Information
- ID
- 17094
- Time
- 1000ms
- Memory
- 128MiB
- Difficulty
- (None)
- Tags
- # Submissions
- 0
- Accepted
- 0
- Uploaded By