日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

2017年第八届蓝桥杯 - 省赛 - C/C++大学A组 - B. 跳蚱蜢

發布時間:2024/5/6 c/c++ 62 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2017年第八届蓝桥杯 - 省赛 - C/C++大学A组 - B. 跳蚱蜢 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目

如圖所示:

有9只盤子,排成1個圓圈。
其中8只盤子內裝著8只蚱蜢,有一個是空盤。
我們把這些蚱蜢順時針編號為 1~8

每只蚱蜢都可以跳到相鄰的空盤中,
也可以再用點力,越過一個相鄰的蚱蜢跳到空盤中。

請你計算一下,如果要使得蚱蜢們的隊形改為按照逆時針排列,
并且保持空盤的位置不變(也就是1-8換位,2-7換位,…),至少要經過多少次跳躍?

注意:要求提交的是一個整數,請不要填寫任何多余內容或說明文字。

代碼

#include <iostream> #include <cstring> #include <string> #include <cstdlib> #include <queue> #include <set> using namespace std; char *start="012345678"; char *target="087654321"; struct StateAndLevel {char *state;int level;int pos0;StateAndLevel(char *_state,int _level,int _pos0):state(_state),level(_level),pos0(_pos0){} }; struct cmp {bool operator()(char *a,char *b){return strcmp(a,b)<0;} }; void swap(char *s, int a, int b) {char t = s[a];s[a] = s[b];s[b] = t; } queue<StateAndLevel> q; set<char *,cmp> allState; void addNei(char *state,int pos,int newPos,int le) {char *new_state=(char*)malloc(9* sizeof(char));strcpy(new_state,state);swap(new_state,pos,newPos);if(allState.find(new_state)==allState.end()){allState.insert(new_state);q.push(StateAndLevel(new_state,le+1,newPos));} } int main() {q.push(StateAndLevel(start,0,0));allState.insert(start);while(!q.empty()){StateAndLevel sal=q.front();char *state=sal.state;int le=sal.level,pos0=sal.pos0,new_pos;if(strcmp(state,target)==0){cout << le << endl;return 0;}new_pos=(pos0-1+9)%9;addNei(state,pos0,new_pos,le);new_pos=(pos0-2+9)%9;addNei(state,pos0,new_pos,le);new_pos=(pos0+1+9)%9;addNei(state,pos0,new_pos,le);new_pos=(pos0+2+9)%9;addNei(state,pos0,new_pos,le);q.pop();}return 0; }

總結

以上是生活随笔為你收集整理的2017年第八届蓝桥杯 - 省赛 - C/C++大学A组 - B. 跳蚱蜢的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。