From f08fd4d319bb704ee3d100893f171677261782c3 Mon Sep 17 00:00:00 2001 From: Apollonius <111100170+mahaoming2022@users.noreply.github.com> Date: Sun, 31 Mar 2024 22:25:16 +0800 Subject: [PATCH] Create chess.cpp --- PJ/2017/chess.cpp | 85 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 PJ/2017/chess.cpp diff --git a/PJ/2017/chess.cpp b/PJ/2017/chess.cpp new file mode 100644 index 0000000..2c6d605 --- /dev/null +++ b/PJ/2017/chess.cpp @@ -0,0 +1,85 @@ +#include + +using namespace std; + +typedef long long ll; +const int Dx[14]={0, 0,0, 0,1, 1,1,-1,-1,-1,2,-2}; +const int Dy[14]={1,-1,2,-2,0,-1,1, 0,-1, 1,0, 0}; +const int W[14]= {0, 0,2, 2,0, 2,2, 0, 2, 2,2, 2}; + +struct node{ + int x,y,w,c; + bool operator > (const node& A) const + { + return (this->w)>(A.w); + } +}; + +int m,n; +bool has_color[124][124]; +int color[124][124]; +int dis[124][124]; +bool vis[124][124]; + +priority_queue,greater > q; + +void dijkstra() +{ + for(int i=1;i<=m;++i) + for(int j=1;j<=m;++j) + dis[i][j]=1<<30,vis[i][j]=0; + dis[1][1]=0; + q.push({1,1,0,color[1][1]}); + while(!q.empty()) + { + node cur=q.top(); + q.pop(); + int x=cur.x; + int y=cur.y; + int w=cur.w; + int c=cur.c; + if(vis[x][y]) + continue; + if(!has_color[x][y]) + continue; + vis[x][y]=1; + for(int d=0;d<12;++d) + { + int xx=x+Dx[d]; + int yy=y+Dy[d]; + int ww=w+W[d]; + if(!has_color[xx][yy]) + continue; + if(xx<1||xx>m||yy<1||yy>m) + continue; + if(c!=color[xx][yy]) + ww++; + if(ww>m>>n; + for(int i=1;i<=n;++i) + { + int xi,yi,ci; + cin>>xi>>yi>>ci; + color[xi][yi]=ci; + has_color[xi][yi]=1; + } + dijkstra(); + if(!has_color[m][m]) + dis[m][m]=min(dis[m-1][m],dis[m][m-1])+2; + if(dis[m][m]>=(1<<30)) + dis[m][m]=-1; + cout<