codeforces gym 100825 D Rings

这题果然就是个暴力题....

看每个T的四个方向,有'.',或者在边界上就填1

不然就填四个方向上最小的那个数再加1

然而写wa了几发,有点蠢...

  1 #include <bits/stdc++.h>
  2 
  3 using namespace std;
  4 
  5 char a[105][105];
  6 int vis[105][105];
  7 
  8 int dir[4][2] = {0,1,0,-1,1,0,-1,0};
  9 int n,m;
 10 
 11 bool ok(int x,int y) {
 12     if(x < 1 || y < 1 || x > n || y > m) {
 13         return false;
 14     }
 15     return true;
 16 }
 17 int main() {
 18 
 19 
 20 
 21     cin>>n>>m;
 22     memset(vis,101,sizeof(vis));
 23     for(int i = 1; i <= n; i++) {
 24         scanf("%s",a[i] + 1);
 25 
 26     }
 27     for(int i = 1; i <= 101; i++) {
 28         for(int j = 1; j <= 101; j++) {
 29             vis[i][j] = 101;
 30         }
 31     }
 32 
 33 
 34     for(int k = 1; k <= 100; k++) {
 35         for(int i = 1; i <= n; i++) {
 36             for(int j = 1; j <= m; j++) {
 37                 if(a[i][j] == 'T') {
 38                     for(int x = 0; x < 4; x++) {
 39                         int nx = i + dir[x][0];
 40                         int ny = j + dir[x][1];
 41                         if(!ok(nx,ny)) {
 42                             /*if(i == 2 && j == 17) {
 43                                 cout<<vis[nx][ny]<<endl;
 44                             }*/
 45                             vis[i][j] = 1;
 46                             break;
 47                         }
 48                         if(ok(nx,ny) && a[nx][ny] == '.') {
 49 
 50                             vis[i][j] = 1;
 51                             break;
 52 
 53                         }
 54                         else if(ok(nx,ny) && vis[nx][ny] != 101) {
 55 
 56                             vis[i][j] = min(vis[i][j],vis[nx][ny] + 1);
 57                         }
 58                     }
 59                 }
 60             }
 61         }
 62 
 63     }
 64 
 65     int cnt = 1;
 66     for(int i = 1; i <= n; i++) {
 67         for(int j = 1; j <= m; j++) {
 68             if(vis[i][j] != 101) {
 69                 cnt = max(cnt,vis[i][j]);
 70             }
 71         }
 72     }
 73 
 74     //cout<<cnt<<endl;
 75     if(cnt < 10) {
 76         for(int i = 1; i <= n; i++) {
 77             for(int j = 1; j <= m; j++) {
 78                 //cout<<vis[i][j]<<' ';
 79                 if(vis[i][j] == 101) {
 80                     printf("..");
 81                 }
 82                 else {
 83                     printf(".");
 84                     printf("%d",vis[i][j]);
 85                 }
 86 
 87             }
 88             printf("\n");
 89         }
 90     }
 91     else {
 92         for(int i = 1; i <= n; i++) {
 93             for(int j = 1; j <= m; j++) {
 94                 if(vis[i][j] == 101) {
 95                     printf("...");
 96                 }
 97                 else if(vis[i][j] < 10) {
 98                     printf("..");
 99                     printf("%d",vis[i][j]);
100                 }
101                 else {
102                     printf(".");
103                     printf("%d",vis[i][j]);
104                 }
105 
106             }
107             printf("\n");
108         }
109     }
110 
111 }

猜你喜欢

转载自www.cnblogs.com/wangwangyu/p/9727275.html