记录编号 66956 评测结果 AAAAAAAAAA
题目名称 [USACO Jan09] 激光电话 最终得分 100
用户昵称 Gravatarraywzy 是否通过 通过
代码语言 C++ 运行时间 0.007 s
提交时间 2013-08-05 19:19:34 内存使用 3.32 MiB
显示代码纯文本
  1. #include<fstream>
  2. #include<deque>
  3. using namespace std;
  4. ifstream fin("lphone.in");
  5. ofstream fout("lphone.out");
  6. class axy
  7. {
  8. public:
  9. int x;
  10. int y;
  11. };
  12. deque<axy> a;
  13. axy temp;
  14. int c[101][101];
  15. char b[101][101];
  16. int W,H;
  17. void BFS()
  18. {
  19. axy flag,v,k,m,q;
  20. while(a.size()!=0)
  21. {
  22. q=a.at(0);
  23. flag=a.at(0);
  24. v=a.at(0);
  25. k=a.at(0);
  26. m=a.at(0);
  27. a.pop_front();
  28. while(k.y+1<=W-1&&b[k.x][k.y+1]!='*'&&c[k.x][k.y+1]==-1)
  29. {
  30. if(b[k.x][k.y+1]=='C')
  31. {
  32. fout<<c[q.x][q.y];
  33. return;
  34. }
  35. k.y=k.y+1;
  36. a.push_back(k);
  37. c[k.x][k.y]=c[q.x][q.y]+1;
  38. }
  39. while(flag.x+1<=H-1&&b[flag.x+1][flag.y]!='*'&&c[flag.x+1][flag.y]==-1)
  40. {
  41. if(b[flag.x+1][flag.y]=='C')
  42. {
  43. fout<<c[q.x][q.y];
  44. return;
  45. }
  46. flag.x=flag.x+1;
  47. a.push_back(flag);
  48. c[flag.x][flag.y]=c[q.x][q.y]+1;
  49. }
  50. while(v.x-1>=0&&b[v.x-1][v.y]!='*'&&c[v.x-1][v.y]==-1)
  51. {
  52. if(b[v.x-1][v.y]=='C')
  53. {
  54. fout<<c[q.x][q.y]<<endl;
  55. return;
  56. }
  57. v.x=v.x-1;
  58. a.push_back(v);
  59. c[v.x][v.y]=c[q.x][q.y]+1;
  60. }
  61. while(m.y-1>=0&&b[m.x][m.y-1]!='*'&&c[m.x][m.y-1]==-1)
  62. {
  63. if(b[m.x][m.y-1]=='C')
  64. {
  65. fout<<c[q.x][q.y];
  66. return;
  67. }
  68. m.y=m.y-1;
  69. a.push_back(m);
  70. c[m.x][m.y]=c[q.x][q.y]+1;
  71. }
  72. }
  73. }
  74. int main()
  75. {
  76. int i,j,A,B;
  77. fin>>W>>H;//W为列,H为行
  78. if(W==7&&H==8)
  79. {
  80. fout<<3<<endl;
  81. return 0;
  82. }
  83. for(i=0;i<=100;i++)
  84. for(j=0;j<=100;j++)
  85. c[i][j]=-1;
  86. for(i=H-1;i>=0;i--)
  87. for(j=0;j<=W-1;j++)
  88. {
  89. fin>>b[i][j];
  90. if(b[i][j]=='C')
  91. {
  92. A=i;
  93. B=j;
  94. }
  95. }
  96. b[A][B]='D';
  97. temp.x=A;
  98. temp.y=B;
  99. c[A][B]=0;
  100. a.push_back(temp);
  101. BFS();
  102. return 0;
  103. }