Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- char area[100][100];
- bool vis[100][100];
- int dx[]={1,-1,0,0};
- int dy[]={0,0,-1,1};
- int row,step,counts,flag,flag2;
- void dfs(int r,int c,char ch)
- {
- if(flag2) return;
- if(r<0 || c<0 || r>=row || c>=row) return;
- if(area[r][c]=='#') return;
- if(vis[r][c]==1) return;
- if(area[r][c]!='.' && area[r][c]!=(ch+1))
- {
- return;
- }
- else if(area[r][c]!='.' && area[r][c]==(ch+1))
- {
- ch=ch+1;
- if(ch-64==flag)
- {
- flag2=1;
- return;
- }
- }
- vis[r][c]=1;
- counts++;
- for(int i=0;i<4;i++)
- {
- dfs(r+dx[i],c+dy[i],ch);
- }
- return;
- }
- int main()
- {
- int i,j,k,n,x,y,z,t;
- scanf("%d",&t);
- for(i=1;i<=t;i++)
- {
- memset(vis,0,sizeof(vis));
- counts=0;
- flag=0;
- flag2=0;
- scanf("%d",&row);
- for(j=0;j<row;j++)
- {
- for(k=0;k<row;k++)
- {
- cin>>area[j][k];
- if(area[j][k]>='A' && area[j][k]<='Z')
- {
- flag++;
- }
- if(area[j][k]=='A')
- {
- x=j;
- y=k;
- }
- }
- }
- dfs(x,y,64);
- if(flag2)
- {
- printf("Case %d: %d\n",i,counts);
- }
- else
- {
- printf("Case %d: Impossible",i);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement