比赛 近期练习题回顾 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 棋盘 最终得分 100
用户昵称 ShallowDream雨梨 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2018-10-22 21:51:43
显示代码纯文本
  1. #include<iostream>
  2. #include<cstring>
  3. #include<cstdio>
  4. #include<iomanip>
  5. #include<algorithm>
  6. using namespace std;
  7. int minm,m,n,coy,cox,co,a[1050][1050],mina[1050][1050];
  8. int tx[4]={1,0,-1,0},ty[4]={0,1,0,-1},xx,yy;
  9. void s(int x,int y,int nowm,int nowco,bool used){
  10. if(x==m&&y==m) {
  11. if(minm>nowm)minm=nowm;}
  12. else{
  13. for(int i=0;i<=3;i++)
  14. {xx=x+tx[i];yy=y+ty[i];
  15. if(xx>=1&&xx<=m&&yy>=1&&yy<=m){
  16. if(a[xx][yy]>0){
  17. if(nowco==a[xx][yy]){
  18. if(nowm<mina[xx][yy]){
  19. {mina[xx][yy]=nowm;
  20. s(xx,yy,nowm,nowco,0);}}}
  21. else{
  22. if(nowm<mina[xx][yy]+1){
  23. mina[xx][yy]=nowm+1;
  24. s(xx,yy,nowm+1,a[xx][yy],0);
  25. }}}
  26. else{
  27. if(used==0&&nowm<mina[xx][yy]+2)
  28. {
  29. mina[xx][yy]=nowm+2;
  30. s(xx,yy,nowm+2,nowco,1);
  31. }}}}}
  32. }
  33. int Main(){
  34. freopen("checkerboard.in","r",stdin);
  35. freopen("checkerboard.out","w",stdout);
  36. ios::sync_with_stdio(false);
  37. cin>>m>>n;
  38. for(int i=1;i<=m;i++)
  39. for(int o=1;o<=m;o++)
  40. mina[i][o]=99999999;
  41. for(int i=1;i<=n;i++){
  42. cin>>cox>>coy>>co;
  43. co++;
  44. a[cox][coy]=co;}
  45. /*for(int i=1;i<=m;i++){cout<<endl;
  46. for(int o=1;o<=m;o++)
  47. cout<<a[i][o]<<' ';}
  48. cout<<endl;*/
  49. minm=99999999;
  50. mina[1][1]=0;
  51. s(1,1,0,a[1][1],0);
  52. if(minm==99999999) cout<<-1;
  53. else
  54. cout<<minm;
  55. return 0;
  56. }
  57. int cr=Main();
  58. int main(){;}