数据结构 10-排序6 Sort with Swap(0, i)C语言
10-排序6 Sort with Swap(0, i)
Given any permutation of the numbers {0, 1, 2,..., N−1}, it is easy to sort them in increasing order. But what if Swap(0, *)
is the ONLY operation that is allowed to use? For example, to sort {4, 0, 2, 1, 3} we may apply the swap operations in the following way:
-
Swap(0, 1) => {4, 1, 2, 0, 3}
-
Swap(0, 3) => {4, 1, 2, 3, 0}
-
Swap(0, 4) => {0, 1, 2, 3, 4}
Now you are asked to find the minimum number of swaps need to sort the given permutation of the first N nonnegative integers.
Input Specification:
Each input file contains one test case, which gives a positive N (≤105) followed by a permutation sequence of {0, 1, ..., N−1}. All the numbers in a line are separated by a space.
Output Specification:
For each case, simply print in a line the minimum number of swaps need to sort the given permutation.
Sample Input:
-
10
-
3 5 7 2 6 4 9 0 8 1
Sample Output:
9
code
-
-
-
int data[100010];
-
bool visited[100010];
-
-
int travCircle(int s)
-
{
-
int current = data[s];
-
int cnt = 1;
-
visited[s] = true;
-
while (current != s)
-
{
-
visited[current] = true;
-
cnt ;
-
current = data[current];
-
}
-
return cnt;
-
}
-
-
int main(void)
-
{
-
int n;
-
scanf("%d", &n);
-
-
for (int i = 0; i < n; i) visited[i] = false;
-
for (int i = 0; i < n; i) scanf("%d", &data[i]);
-
-
int ans = 0;
-
for (int i = 0; i < n; i)
-
{
-
if (visited[i]) continue;
-
int tmp = travCircle(i);
-
if (i == 0)
-
{
-
if (tmp == 1) ans = 0;
-
else ans = (tmp - 1);
-
}
-
else
-
{
-
if (tmp == 1) ans = 0;
-
else ans = (tmp 1);
-
}
-
}
-
printf("%d\n", ans);
-
return 0;
-
}
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgggaff
系列文章
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13