一開始Y1,Y2兩個引數看不懂,再看一遍題目後才知道,vector<int>索引代表是行數,值代表的是列
此題資料量不大,直接深度搜尋即可
注意這裡深度搜尋的訪問標識不是以前的索引和元素,而是一個交換元素後的整個狀態vector<int>,這樣可以避免重複元素的搜尋
set<vector<int> > visit; bool flag; void dfs(vector<int>& src, vector<int>& dst){ if(src == dst ) flag =true; if(flag) return; if(visit.find(src)!=visit.end()) return; visit.insert(src); for(int i = 0 ; i < src.size(); ++ i){ for(int j = i+1; j < src.size(); ++ j){ if(src[i] > src[j]){ swap(src[i],src[j]); dfs(src,dst); swap(src[i],src[j]); } } } } string move(vector <int> Y1, vector <int> Y2) { visit.clear(); flag = false; dfs(Y1, Y2); if(flag) return "Possible"; else return "Impossible"; }