///* // * map01.cpp // * // * Created on: May 7, 2024 // * Author: 28032 //*/ // ////1.分为两种情况,可以是不依靠通道到达终点;也可以是通过通道到达终点 ////结果取其中较小的一个 ////2.先计算第一种情况,第二种情况可以在第一种情况上加工:找到一个通道到达起点的代价最小,再找到一个通道到达终点的代价最小 ////为什么不找三及以上个通道:假设找三个通道将三个通道连成一个三角形,为什么不直达而是多到一个站呢,因而只取两个通道 ////3.计算第一种情况,要考虑到起点与终点不能直接到达的情况,所以要分别从起点和终点开始BFS求到达每个格子的代价 ////不能到达的显示一开始初始化的最大值 //#include //#include //using namespace std; // //#define maxMAP 2010 // //int MAP[maxMAP][maxMAP]; // //long long S[maxMAP][maxMAP], // E[maxMAP][maxMAP]; //int m,n,w; // //int x[] = {1,0,-1,0}; //int y[] = {0,1,0,-1}; // //void BFS(long long t[maxMAP][maxMAP],int xx,int yy) //{ // t[yy][xx] = 0; // queue > coordinates; // // coordinates.push({xx,yy}); // // while(!coordinates.empty()) // { // pair co = coordinates.front(); // coordinates.pop(); // // for(int i = 0;i < 4;i++) // { // int x_next = co.first + x[i]; // int y_next = co.second + y[i]; // // if(MAP[y_next][x_next] != -1 && t[y_next][x_next] == 1e18 && 1 <= x_next && x_next <=m && 1 <= y_next && y_next <= n) // { // t[y_next][x_next] = t[co.second][co.first] + w; // coordinates.push({x_next,y_next}); // } // } // } // //} //int main() //{ // cin>>n>>m>>w; // // for(int i = 1;i <= n;i++) // for(int j = 1;j <= m;j++) // cin>>MAP[i][j],S[i][j] = 1e18,E[i][j] = 1e18; // // BFS(S,1,1); // BFS(E,m,n); // long long ans = S[n][m]; // // long long s_to_turnal = 1e18, // e_to_turnal = 1e18; // // for(int i = 1;i <=n;i++) // for(int j = 1;j <= m;j++) // if(MAP[i][j]>=1) // { // s_to_turnal = min(s_to_turnal,S[i][j]+MAP[i][j]); // e_to_turnal = min(e_to_turnal,E[i][j]+MAP[i][j]); // } // // ans = min(ans,s_to_turnal + e_to_turnal); // // if(ans == 1e18) // cout<<-1<