ãããããããºã«ã®æå°ææ°ãæ±ããåé¡ï¼ããã®æã®åé¡ã§ã¯ãã¾ããããå¾ãç¶æ ããã©ãã ãããããè¦ç©ãããï¼
å顿¦è¦
ãã¹ããã£ã¦ãæåãåãã
ãã¹ã«ã¯ç½ç³ãé»ç³ã®ãããããç½®ããã¦ãããç½®ããæ¹ã¯æåå
ã§è¡¨ããããå¾ã 2 ãã¹ã¯ç©ºããã¹ã§ããã
æ¬¡ã®æä½ãç¹°ãè¿ããã¨ã§ãåãã ãã¹ã®ç½®ããæ¹ãæåå
ã§è¡¨ãããå¾ã 2 ãã¹ã¯ç©ºããã¹ã§ããç¶æ
ã«ãããã
ãæä½ã
ç³ãç½®ããã¦ãããããªé£ç¶ãã 2 ãã¹ãé¸ã³ãããããé åºãä¿ã£ãã¾ã¾ã空ããã¹ (é£ç¶ 2 ãã¹ãããã¨ãä¿è¨¼ããã) ã¸ã¨ç§»åãããã
å ·ä½ä¾
= "BWBWBW"ã
= "WWWBBB" ã®ã¨ããæ¬¡ã®ããã«æç 4 æã®æä½ã§å®ç¾ã§ããã
BWBWBW.. BW..BWBW BWWBB..W ..WBBBWW WWWBBB..
å¶ç´
èãããã¨
ãã®ãããªããºã«ãè§£ãæå°ææ°ãæ±ããåé¡ã§ã¯ãBFS ãçãããã®éã«éè¦ãªãã¨ã¯ãããããç¶æ ãã©ãã ããããã ããã®ç¶æ æ°ãååå°ãããã°ãBFS ã§è§£ããã¨ãã§ããã
ä»åã¯ã
- 空ããã¹ã®ä½ç½®ã¨ãã¦ããããå ´åã®æ°ï¼
éã
- ç³ãç½®ããã¦ãããã¹ã«ã¤ãã¦ã®ãåãã¹ã®ç³ã®è²ã®çµã¿åããï¼æå¤§ã§ã
éã
ã¨ãããã¨ã§ãææªã§ã éãã§ãããã¨ããããã
ã¨ããå¶ç´ãèããã°ãååã«ãã¹ã¦èª¿ã¹ä¸ãããã¨ãå¯è½ã (å
¬å¼è§£èª¬ã§ã¯ãã£ã¨çªãè©°ãã¦ãã)ã
ãã£ã¦ãBFS ããããå®è£
ãå°ã大å¤ãæå¾ã«è¨ç®éãè¦ç©ãããåç¶æ
ã«å¯¾ãã¦ãããããåããæä½ã éãããã®ã§ãBFS ã®è¨ç®éã¯
ã¨è¦ç©ãããã
ã³ã¼ã
#include <bits/stdc++.h> using namespace std; int main() { int N; string S, T; cin >> N >> S >> T; S += ".."; T += ".."; map<string, int> dp; dp[S] = 0; queue<string> que; que.push(S); while (!que.empty()) { auto str = que.front(); que.pop(); int emp = 0; for (int i = 0; i < str.size(); ++i) { if (str[i] == '.') { emp = i; break; } } for (int i = 0; i+1 < str.size(); ++i) { if (str[i] == '.' || str[i+1] == '.') continue; string str2 = str; swap(str2[i], str2[emp]); swap(str2[i+1], str2[emp+1]); if (!dp.count(str2)) { dp[str2] = dp[str] + 1; que.push(str2); } } } if (dp.count(T)) cout << dp[T] << endl; else cout << -1 << endl; }