題面傳送門
開始想去dp,但是寫完之後發現不滿足dp的無後效性,真是gg
然後開始著手dfs+記憶化。貌似bfs也能跑?(話說我是不是押到題了,之前給四十五中出過一道類似於bfs的題)但感覺複雜度太大,會tle
正解是將已經有色的格仔向四個不同的方向搜尋,未染色的就進行染色,之後再搜尋
一定要注意邊界的判斷啊!
#include
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define dep(i,a,b) for(int i=a;i>=b;i--)
#define ll long long
#define mem(x,num) memset(x,num,sizeof x)
#define inf 0x3f3f3f
using
namespace
std;
const
int maxn=1006,dx[4]=,dy[4]=;
int n,m,x,y,opt,map[maxn][maxn],f[maxn][maxn];
void dfs(int x,int y,int p)
else
}else
}}int main()
f[1][1]=0;
dfs(1,1,0);
if(f[n][n]==1061109567)cout
<<"-1\n";
else
cout
0;}
noip 2017 普及組 T3 棋盤
有乙個m m的棋盤,棋盤上每乙個格仔可能是紅色 黃色或沒有任何顏色的。你現在要從棋盤的最左上角走到棋盤的最右下角。任何乙個時刻,你所站在的位置必須是有顏色的 不能是無色的 你只能向上 下 左 右四個方向前進。當你從乙個格仔走向另乙個格仔時,如果兩個格仔的顏色相同,那你不需要花費金幣 如果不同,則你需...
NOIP2017普及組 棋盤
noip2017 有乙個m m的棋盤,棋盤上每乙個格仔可能是紅色 黃色或沒有任何顏色的。你現在 要從棋盤的最左上角走到棋盤的最右下角。任何乙個時刻,你所站在的位置必須是有顏色的 不能是無色的 你只能向上 下 左 右四個方向前進。當你從乙個格仔走向另乙個格仔時,如果兩個格仔的顏色相同,那你 不需要花費...
NOIP2017普及組 棋盤
棋盤 有乙個m m的棋盤,棋盤上每乙個格仔可能是紅色 黃色或沒有任何顏色的。你現在 要從棋盤的最左上角走到棋盤的最右下角。任何乙個時刻,你所站在的位置必須是有顏色的 不能是無色的 你只能向上 下 左 右四個方向前進。當你從乙個格仔走向另乙個格仔時,如果兩個格仔的顏色相同,那你 不需要花費金幣 如果不...