1. 程式人生 > 程式設計 >element-ui 彈窗元件封裝的步驟

element-ui 彈窗元件封裝的步驟

【藍橋杯】跳蚱蜢

題目連線http://oj.ecustacm.cn/problem.php?id=1318

1.1建模

直接讓蚱蜢跳到空盤有點麻煩,因為有很多蚱蜢在跳,跳暈了。如果看成空盤跳到蚱蜢的位置就簡單多了,只有一個空盤在跳。
  題目給的是一個圓圈,不好處理,此時祭出一個建模大法:“化圓為線”! 把空盤看成0,那麼有9個數字{0,1,2,3,4,5,6,7,8},一個圓圈上的9個數字,拉直成了一條線上的9個數字。
  等等,這不就是八數碼問題嗎?八數碼是經典的BFS問題。
  八數碼有9個數字{0,1,2,3,4,5,6,7,8},它有9!=362880種排列。也不多,
  本題的初始狀態是“012345678”,終止狀態是“087654321”。

  從初始狀態跳一次,有4種情況:
  在這裡插入圖片描述

1.2程式碼的思路

這道題要採用的是BFS來遍歷,每一個結點有四個根節點,層次遍歷過去,佇列的一個點是用結構體表示,存放的是字串和當前的總步驟,當出現087654321的時候就結束,另外,要用一個map來判重,map<string,bool>mp;如果是false(沒出現過該串),則標記為false並且加入佇列中去,整體主要思路差不多這樣。

1.3完整程式碼

#include<bits/stdc++.h>
using namespace std;
struct node{
    string s;
    int t;
    node
(){} node(string ss,int tt) { s=ss;t=tt; } }; map<string,bool>mp; queue <node> q; void BFS_solve(){ while(!q.empty()) { node now=q.front(); q.pop(); string s=now.s;int t=now.t; if(s=="087654321") { cout<<
t; break; } int i; for(i=0;i<10;i++) { if(s[i]=='0') break; }//找到字元0 for(int j=i-2;j<=i+2;j++) { int k=(j+9)%9; if(k==i) continue; char tmp; tmp = s[i];s[i] = s[k];s[k] = tmp;//相當於0的位置在跳 if(!mp[s])//當前排列順序的串沒有被遍歷過 { mp[s]=true; q.push(node(s,t+1)); } tmp=s[k];s[k]=s[i];s[i]=tmp;//廣度遍歷的一個點已經加入隊列了,要把串變回來才能繼續遍歷同層次的點 } } } int main() { string s="012345678"; node n0=node(s,0); q.push(n0); mp[s]=true; BFS_solve(); }