2 条题解
-
2
//今天不吃蛆 吃tj!!! #include<bits/stdc++.h> #define f(i,l,r) for(int i=l;i<=r;i++) #define fx(i,l,r) for(int i=l;i<r;i++) using namespace std; int n; char a[105][105]; bool b[105][105],c[105][105],d[105][105]; int ans; bool yuejie(int x,int y){ if(x>=0&&x<=n&&y>=0&&y<=n) return 1; return 0; } void dfs(int x,int y){ if(b[x][y]||!yuejie(x,y)) return; b[x][y]=1; if(a[x][y]=='#'){ c[x][y]=1;return; } dfs(x-1,y);dfs(x,y-1); dfs(x,y+1);dfs(x+1,y); return; } void z(int x,int y){ if(yuejie(x-1,y)&&a[x-1][y]=='.'&&b[x-1][y]) ans++; if(yuejie(x,y-1)&&a[x][y-1]=='.'&&b[x][y-1]) ans++; if(yuejie(x,y+1)&&a[x][y+1]=='.'&&b[x][y+1]) ans++; if(yuejie(x+1,y)&&a[x+1][y]=='.'&&b[x+1][y]) ans++; return; } int main(){ ios::sync_with_stdio(0); cin.tie(0);cout.tie(0); cin>>n; f(i,1,n){ cin>>a[i]; for(int j=n;j>=1;j--){ a[i][j]=a[i][j-1]; } a[i][0]=' '; } f(i,2,n+1){ a[i][0]='#'; } f(i,0,n-1){ a[i][n+1]='#'; } f(j,1,n){ if(j!=1) a[0][j]='#'; if(j!=n) a[n+1][j]='#'; } n++; dfs(1,1);dfs(n,n); f(i,0,n){ f(j,0,n){ if(c[i][j]==1) z(i,j); } } cout<<ans*9; }
-
1
//搜一下终点和终点,dfs即可 #include<bits/stdc++.h> #define f(i,l,r) for(int i=l;i<=r;i++) #define fx(i,l,r) for(int i=l;i<r;i++) using namespace std; int n; char a[105][105]; bool b[105][105],c[105][105],d[105][105]; int ans; bool yuejie(int x,int y){ if(x>=0&&x<=n&&y>=0&&y<=n) return 1; return 0; } void dfs(int x,int y){ if(b[x][y]||!yuejie(x,y)) return; b[x][y]=1; if(a[x][y]=='#'){ c[x][y]=1;return; } dfs(x-1,y);dfs(x,y-1); dfs(x,y+1);dfs(x+1,y); return; } void z(int x,int y){ if(yuejie(x-1,y)&&a[x-1][y]=='.'&&b[x-1][y]) ans++; if(yuejie(x,y-1)&&a[x][y-1]=='.'&&b[x][y-1]) ans++; if(yuejie(x,y+1)&&a[x][y+1]=='.'&&b[x][y+1]) ans++; if(yuejie(x+1,y)&&a[x+1][y]=='.'&&b[x+1][y]) ans++; return; } int main(){ ios::sync_with_stdio(0); cin.tie(0);cout.tie(0); cin>>n; f(i,1,n){ cin>>a[i]; for(int j=n;j>=1;j--){ a[i][j]=a[i][j-1]; } a[i][0]=' '; } f(i,2,n+1){ a[i][0]='#'; } f(i,0,n-1){ a[i][n+1]='#'; } f(j,1,n){ if(j!=1) a[0][j]='#'; if(j!=n) a[n+1][j]='#'; } /*f(i,0,n+1){ f(j,0,n+1){ cout<<a[i][j]; } cout<<endl; }*/ n++; dfs(1,1);dfs(n,n); f(i,0,n){ f(j,0,n){ if(c[i][j]==1) z(i,j); } } cout<<ans*9; return 0; }
- 1
信息
- ID
- 246
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 7
- 标签
- (无)
- 递交数
- 306
- 已通过
- 76
- 上传者