网站排名的优化,就业网站建设方案,网站推广专业,魔鬼做交易网站目录 原题截图#xff1a;
题目大意#xff1a;
主要思路#xff1a;
注#xff1a;
代码#xff1a; 原题截图#xff1a; 题目大意#xff1a;
给定两个 的矩阵 和 。
你每次可以交换矩阵 的相邻两行中的所有元素或是交换两列中的所有元素。
请问要使 变换至…目录 原题截图
题目大意
主要思路
注
代码 原题截图 题目大意
给定两个 的矩阵 和 。
你每次可以交换矩阵 的相邻两行中的所有元素或是交换两列中的所有元素。
请问要使 变换至 至少需要几步操作
如果无法变换至 则输出 -1。
主要思路
这个题正解不好想但我们看一下数据范围HW5。我们可以暴力bfs但我们要枚举有效数组所以用一个map记录就做成了。
注
不要再函数中开数组用vectorvectorint。
代码
#includebits/stdc.h
using namespace std;
int n,m;
vectorvectorint a(10,vectorint(10)),b(10,vectorint(10));
bool equation(vectorvectorint a,vectorvectorint b)
{for(int i1;in;i){for(int j1;jm;j){if(a[i][j]!b[i][j]){return 0;}}}return 1;
}
struct node{vectorvectorint x;int cnt;
};
mapvectorvectorint,bool mp;
void bfs()
{queuenode q;q.push({a,0});mp[a] 1;while(!q.empty()){node tmpq.front();q.pop();if(equation(tmp.x,b)){couttmp.cnt;exit(0);}for(int i1;in;i){swap(tmp.x[i],tmp.x[i1]);if(!mp.count(tmp.x)){q.push({tmp.x,tmp.cnt1});mp[tmp.x] 1; }swap(tmp.x[i],tmp.x[i1]);}for(int i1;im;i){for(int j1;jn;j){swap(tmp.x[j][i],tmp.x[j][i1]);}if(!mp.count(tmp.x)){q.push({tmp.x,tmp.cnt1});mp[tmp.x] 1; }for(int j1;jn;j){swap(tmp.x[j][i],tmp.x[j][i1]);}}}
}
int main()
{cinnm;for(int i1;in;i){for(int j1;jm;j){cina[i][j];}}for(int i1;in;i){for(int j1;jm;j){cinb[i][j];}}bfs();cout-1;return 0;
}