fork(1) download
  1. #include <cstdio>
  2. #include <cmath>
  3. #include <cstdlib>
  4. #include <cctype>
  5. #include <cassert>
  6. #include <cstring>
  7. #include <climits>
  8. #include <iostream>
  9. #include <sstream>
  10. #include <string>
  11. #include <numeric>
  12. #include <utility>
  13. #include <algorithm>
  14. #include <stack>
  15. #include <queue>
  16. #include <vector>
  17. #include <list>
  18. #include <map>
  19. #include <set>
  20. using namespace std;
  21. #define MAX 55
  22. #define pii pair< int, int>
  23. char grid[MAX][MAX],c,str[MAX];
  24. int n, m;
  25. bool inRange(int i, int j)
  26. {
  27. return (i>=0 && i<n && j>=0 && j<m);
  28. }
  29. int main()
  30. {
  31. int i, j;
  32. pii p;
  33. queue< pii > Q;
  34. queue<pii>Q1;
  35. scanf("%d %d",&n,&m);
  36. while(n!=0)
  37. {
  38. int visited[n][m];
  39. for(i=0;i<n;i++)
  40. {
  41. for(j=0;j<m;j++)
  42. {
  43. visited[i][j]=0;
  44. }
  45. }
  46. int d=0;
  47. for(i=0; i<n; i++)
  48. {
  49. scanf("%s",str);
  50. for(j=0;j<m;j++)
  51. {
  52. grid[i][j]=str[j];
  53. //printf("%c\n",grid[i][j]);
  54. if(str[j]=='A')
  55. {
  56. //printf("%d %d\n",i,j);
  57. p.first=i;
  58. p.second=j;
  59. Q1.push(p);
  60. }
  61. }
  62. }
  63. while(!Q1.empty())
  64. {
  65. p=Q1.front();
  66. //printf("%d %d\n",p.first,p.second);
  67. Q1.pop();
  68. Q.push(p);
  69. while(!Q.empty())
  70. {
  71. p=Q.front();
  72. i=p.first;
  73. j=p.second;
  74. c=grid[i][j];
  75. Q.pop();
  76. if(inRange(i+1,j) && (int)grid[i+1][j]==(int)grid[i][j]+1&&visited[i+1][j]!=-1)
  77. {
  78. p.first=i+1;
  79. p.second=j;
  80. Q.push(p);
  81. visited[i+1][j]=-1;
  82. }
  83. if(inRange(i-1,j) && (int)grid[i-1][j]==(int)grid[i][j]+1&&visited[i-1][j]!=-1)
  84. {
  85. p.first=i-1;
  86. p.second=j;
  87. Q.push(p);
  88. visited[i-1][j]=-1;
  89. }
  90. if(inRange(i,j+1) && (int)grid[i][j+1]==(int)grid[i][j]+1&&visited[i][j+1]!=-1)
  91. {
  92. p.first=i;
  93. p.second=j+1;
  94. Q.push(p);
  95. visited[i][j+1]=-1;
  96. }
  97. if(inRange(i,j-1) &&(int)grid[i][j-1]==(int)grid[i][j]+1&&visited[i][j-1]!=-1)
  98. {
  99. p.first=i;
  100. p.second=j-1;
  101. Q.push(p);
  102. visited[i][j-1]=-1;
  103. }
  104. if(inRange(i-1,j-1) &&(int)grid[i-1][j-1]==(int)grid[i][j]+1)
  105. {
  106. p.first=i-1;
  107. p.second=j-1;
  108. Q.push(p);
  109. visited[i][j-1]=-1;
  110. }
  111. if(inRange(i+1,j+1) &&(int)grid[i+1][j+1]==(int)grid[i][j]+1&&visited[i+1][j+1]!=-1)
  112. {
  113. p.first=i+1;
  114. p.second=j+1;
  115. Q.push(p);
  116. visited[i+1][j+1]=-1;
  117. }
  118. if(inRange(i+1,j-1) &&(int)grid[i+1][j-1]==(int)grid[i][j]+1&&visited[i+1][j-1]!=-1)
  119. {
  120. p.first=i+1;
  121. p.second=j-1;
  122. Q.push(p);
  123. visited[i+1][j-1]=-1;
  124. }
  125. if(inRange(i-1,j+1) &&(int)grid[i-1][j+1]==(int)grid[i][j]+1&&visited[i-1][j+1]!=-1)
  126. {
  127. p.first=i-1;
  128. p.second=j+1;
  129. Q.push(p);
  130. visited[i-1][j+1]=-1;
  131. }
  132. }
  133. if(((int)c-65)>d)
  134. d=((int)c-65);
  135. }
  136. printf("%d\n",d+1);
  137. scanf("%d %d",&n,&m);
  138. }
  139. }
  140.  
Success #stdin #stdout 0s 2824KB
stdin
4  3
ABE
CFG
BDH
ABC
1 3
ABC
1 1
A
0 0
stdout
4
3
1