计蒜客 Minimum Distance in a Star Graph 思维水题

来源:互联网 发布:自动注音软件 编辑:程序博客网 时间:2024/06/05 13:31

题目链接

题意:

就是给你两个全排列,让你从第一个变换为第二个,每次只能将第一个位置和其他位置交换,问你最少的交换步骤?



思路:

因为只能和第一个交换,所以没有什么好的交换策略,依据贪心的思想如果第一个数不在他最终的位置则交换到最终位置,否则就找到后面未在正确位置的和第一个交换,一直模拟到全部归位.


PS: 赛场上是bfs+剪枝写的还是有点麻烦...

#include<bits/stdc++.h>using namespace std;char s[20],e[20];int n,ans,pos[20];void solve(){int flag;while(1 == 1){if(s[0] != e[0]){ans++;swap(s[0],s[pos[s[0] - '0']]);}else{flag = 0;for(int i = n-1;i > 0;--i){if(s[i] != e[i]){swap(s[0],s[i]);ans++;flag = 1;break;}}if(!flag) break;}}}int main(){scanf("%d",&n);for(int i = 1;i <= 5;++i){scanf(" %s %s",s,e);for(int j = 0;j < n;++j)pos[e[j]-'0'] = j;ans = 0;solve();printf("%d\n",ans);}}


阅读全文
0 0