直接模拟即可,最近码力太渣多敲敲
#include <cstdio> #include <cstring> #include <algorithm> #include <queue> using namespace std; char map[10][10]; int ans; struct Node{ int x,y; }; int dir[2][8]={1,-1,0,0,1,1,-1,-1,0,0,1,-1,-1,1,1,-1}; bool ok(int x,int y){ if(x>=0 && x<10 && y>=0 && y<10)return 1; return 0; } bool init(){ int i,j,p,q; for(i=0;i<10;i++) for(j=0;j<10;j++){ if(map[i][j]=='.')continue; for(p=0;p<8;p++){ for(q=1;;q++){ int x=i+q*dir[0][p],y=j+q*dir[1][p]; if(ok(x,y)==0)break; if(map[x][y]!=map[i][j])break; } if(q>4) return 1; } } return 0; } void count(int s,int t){ //这里如果只搜(s,t)八个方向上的点更快些 int i,j,p,q; bool vis[10][10]; memset(vis,0,sizeof(vis)); for(i=0;i<10;i++) for(j=0;j<10;j++){ if(map[i][j]!=map[s][t])continue; for(p=0;p<8;p++){ for(q=1;;q++){ int x=i+q*dir[0][p],y=j+q*dir[1][p]; if(ok(x,y)==0)break; if(map[x][y]!=map[i][j])break; } if(q>4){ for(int qq=0;qq<q;qq++) vis[i+qq*dir[0][p]][j+qq*dir[1][p]]=1; } } } int sum=0; for(i=0;i<10;i++) for(j=0;j<10;j++) sum+=vis[i][j]; ans=max(ans,sum); } bool move_ok(int s,int t){ int i,j; for(i=0;i<8;i++){ int x=s+dir[0][i],y=t+dir[1][i]; if(ok(x,y)==0)continue; if(map[x][y]==map[s][t])return 1; } return 0; } void dfs(int x,int y){ int i,j; bool vis[10][10]; struct Node t1,t2; queue<struct Node>q; t1.x=x,t1.y=y; q.push(t1); memset(vis,0,sizeof(vis)); vis[x][y]=1; bool yes=0; while(!q.empty()){ t1=q.front(); q.pop(); if(!yes){ yes=1; } else{ swap(map[x][y],map[t1.x][t1.y]); if(move_ok(t1.x,t1.y)) count(t1.x,t1.y); swap(map[x][y],map[t1.x][t1.y]); } for(i=0;i<4;i++){ int xx=t1.x+dir[0][i],yy=t1.y+dir[1][i]; if(ok(xx,yy)==0 || map[xx][yy]!='.' || vis[xx][yy])continue; t2.x=xx,t2.y=yy,vis[xx][yy]=1; q.push(t2); } } } int solve(){ int i,j; if(init())return -1; ans=0; for(i=0;i<10;i++) for(j=0;j<10;j++){ if(map[i][j]=='.')continue; dfs(i,j); } return ans; } int main(){ int i,T=0; while(scanf("%s",map[0])!=EOF){ for(i=1;i<10;i++) scanf("%s",map[i]); int ans=solve(); if(T>0)puts(""); if(ans==-1)printf("Case #%d: Waiting!\n",++T); else printf("Case #%d: %d\n",++T,ans); } return 0; }
作者:waitfor_ 发表于2013-3-17 23:14:29 原文链接
阅读:40 评论:0 查看评论