n個數字的全排列 去重

 

用set容器去重。

#include<iostream>
#include<algorithm>
#include<string>
#include<math.h>
#include<stdlib.h>
#include <iostream>
#include <vector>
#include <queue>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<stack>
#include<iostream>
#include<set>
#include<map>
using namespace std;

int b[100];
int total=0;
int n=10;
set<int> sss;

void dfs(int t)
{
    int i,temp;
    if(t==total-1)
    {	
    	int zzz=0;
        for(i=0;i<total;i++)
        	zzz=b[i]+zzz*10;
      
        sss.insert(zzz);
    }else
    {
        for(i=t;i<total;i++)
        {
            temp=b[i],b[i]=b[t],b[t]=temp;
            dfs(t+1);
            temp=b[i],b[i]=b[t],b[t]=temp;//恢復原狀
        }
    }
}


int main()
{
	cin>>n;
    total=n;
    for(int i=0;i<n;i++) cin>>b[i];
	dfs(0);
	set<int>::iterator iter=sss.begin();
    while(iter!=sss.end())
    {
        cout<<*iter<<endl;
        ++iter;
    }
	return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章