记录编号 240890 评测结果 AAAAAAAAAA
题目名称 定向越野 最终得分 100
用户昵称 Gravatarmikumikumi 是否通过 通过
代码语言 C++ 运行时间 0.324 s
提交时间 2016-03-24 07:03:57 内存使用 0.37 MiB
显示代码纯文本
  1. #include<cstdio>
  2. #include<iostream>
  3. #include<cstring>
  4. using namespace std;
  5. const int SIZEN=110,INF=0x7fffffff/2;
  6. int N;
  7. int mp[SIZEN][SIZEN];
  8. int mi=INF,ma=0;
  9. void read()
  10. {
  11. scanf("%d",&N);
  12. for(int i=1;i<=N;i++)
  13. {
  14. for(int j=1;j<=N;j++)
  15. {
  16. scanf("%d",&mp[i][j]);
  17. mi=min(mp[i][j],mi);ma=max(mp[i][j],ma);
  18. }
  19. }
  20. }
  21. int dx[]={0,1,0,-1},dy[]={1,0,-1,0};
  22. int ans=INF;
  23. bool on(int x,int y)
  24. {
  25. if(x<=0||y<=0||x>N||y>N) return 0;
  26. return 1;
  27. }
  28. bool vis[SIZEN][SIZEN];
  29. bool dfs(int x,int y,int l,int r)
  30. {
  31. if(mp[x][y]<l||mp[x][y]>r) return 0;
  32. if(x==N&&y==N) return 1;
  33. //cout<<x<<" "<<y<<endl;
  34. vis[x][y]=1;
  35. for(int i=0;i<4;i++)
  36. {
  37. int nx=x+dx[i],ny=y+dy[i];
  38. if(!on(nx,ny)||vis[nx][ny]) continue;
  39. if(dfs(nx,ny,l,r)) return 1;
  40. }
  41. return 0;
  42. }
  43. void work()
  44. {
  45. for(int i=mi;i<=ma;i++)
  46. {
  47. for(int j=i;j<=ma;j++)
  48. {
  49. if(j-i>=ans) continue;
  50. memset(vis,0,sizeof(vis));
  51. if(dfs(1,1,i,j)) ans=j-i;
  52. }
  53. }
  54. printf("%d\n",ans);
  55. }
  56. int main()
  57. {
  58. freopen("adven.in","r",stdin);
  59. freopen("adven.out","w",stdout);
  60. read();
  61. work();
  62. return 0;
  63. }