PAT 1067 Sort with Swap(0,*)
2015-03-01 22:32
260 查看
这道题调试了好久,代码写的比较丑,总的来说,抓住1. 0是否在0的位置。2 . 一共有几个环。如果0在环内,则需要的交换次数为环中除0外的个数,如果0不在环内,则需要一个交换将0放入。
#include <stdio.h> #include <string.h> #include <iostream> using namespace std; int n,right1,count; int Father[100005]; int FindFather(int x){ if (Father[x]!=-1) { Father[x]=FindFather(Father[x]); return Father[x]; } else return x; } void Union(int a,int b){ int tempa=FindFather(a); int tempb=FindFather(b); if (tempa!=tempb) { Father[tempa]=tempb; } } int main(){ int index,ringnum=0; memset(Father,0xff,sizeof(Father)); //freopen("/Users/pantingting/Documents/code/data/input", "r", stdin); scanf("%d",&n); for (int i=0; i<n; i++) { scanf("%d",&index); if (index==i) { Father[i]=-2; right1++; } else Union(index, i); } for (int i=0; i<n; i++) { if (Father[i]==-1) { ringnum++; } } int ans=n-right1+ringnum; if (Father[0]!=-2) { ans-=2; } printf("%d\n",ans); return 0; }
相关文章推荐
- PAT 1067. Sort with Swap(0,*) (25) 整数0到整数N-1的交换排序问题
- pat 1067. Sort with Swap(0,*) (25)
- PAT (Advanced Level) 1067. Sort with Swap(0,*) (25) 只能与0交换
- PAT_1067. Sort with Swap(0,*)
- PAT 1067. Sort with Swap(0,*) (25) 思路简单,优化麻烦
- 【PAT】1067. Sort with Swap(0,*)
- 【PAT】1067. Sort with Swap(0,*)
- PAT - 甲级 - 1067. Sort with Swap(0,*) (25)(模拟+贪心)
- PAT 1067. Sort with Swap(0,*)
- pat1067 Sort with Swap(0,*)
- PAT 1067. Sort with Swap(0,*) (25)(交换同一个数字给数列排序)
- 【PAT】1067. Sort with Swap(0,*) (25)
- PAT 1067. Sort with Swap(0,*) (25)
- PAT|1067. Sort with Swap(0,*)
- 【PAT】【Advanced Level】1067. Sort with Swap(0,*) (25)
- PAT-1067 Sort with Swap(0,*)
- PAT 1067 Sort with Swap(0,*)
- PAT 1067. Sort with Swap(0,*) (25)
- 1067. Sort with Swap(0,*) (25) PAT甲级
- PAT (Advanced Level) Practise 1067 Sort with Swap(0,*) (25)