您的位置:首页 > 其它

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

2017-10-06 19:45 162 查看
题目链接

题意:

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

思路:

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

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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐