问题标题: 全排列问题怎么写

1
1

3
已采纳
曾凡一
曾凡一
新手光能
新手光能

先判断数位有没有超过n

if(x>n)

超过则输出数后输出换行并

回溯

接下来每个数从1到n for循环判断

for(int i=1;i<=n;i++)

然后判断之前用过没有

 if(visited[i]==false)

之后记录到数组以后开始seach(x+1)继续往后搜

0
王子凡
王子凡
高级光能
高级光能

void search(int x)
{
    if (x>n)
    {
        for (int i=1;i<=n;i++)
            cout<<a[i]<<' ';
        cout<<endl;
        return;
    }
    for (int i=1;i<=n;i++)
    {
        if (visited[i]==false)
        {
            a[x]=i;//把i放到x的位置
            visited[i]=true;//把i标记为已经使用过
            search(x+1);
            visited[i]=false;
        }
    }
}
 

0
曾凡一
曾凡一
新手光能
新手光能
void search(int x)
{
    if(x>n)
    {
        for(int i=1;i<=n;i++)
        {
            cout<<a[i]<<' ';
        }
        cout<<endl;
        return ;
    }
    for(int i=1;i<=n;i++)
    {
        if(visited[i]==false)
        {
            a[x]=i;
            visited[i]=true;
            search(x+1);
            visited[i]=false;
        }
    }
}
0
张瑀涵
张瑀涵
高级光能
高级光能

void search(int x)
{
 if(x>n)//元素数量不能大于规定的指定目标。
 {
  for(int i=1;i<=n;i++)
   cout<<a[i]<<" ";
  cout<<endl;//输出这些数列。
 }
 for(int i=1;i<=n;i++)
 {
  if(visited[i]==false)//如果数没有使用
  {
   a[x]=i;//这个数列的第x个变量是i;
   visited[i]=true;//这个数量不能使用;
   search(x+1);//继续查找下一个变量是谁;
   visited[i]=false;//为了能够回溯。
  }
 }
}//这是全排列函数

最后加search(1)

0
曾凡一
曾凡一
新手光能
新手光能
输出自然数1到n所有不重复的排列,即n的全排列,要求所产生的任一数字序列中不允许出现重复的数字。
0
方亦欧
方亦欧
新手光能
新手光能

int main()
{
    cin>>n;
    dfs(1);
    return 0;
}
 

0
储金洋
储金洋
新手光能
新手光能
int n; 
int a[101];
bool vr[101];
void hs(int x)
{
    if(x>n)
    {
        for(int i=1;i<=n;i++)
        {
            cout<<a[i]<<' ';
        }
        cout<<endl;
        return ;
    }
    for(int i=1;i<=n;i++)
    {
        if(vr[i]==0)
        {
            a[x]=i;
            vr[i]=1;
            hs(x+1);
            vr[i]=0;
        }
    }
}
0
程天瑞
程天瑞
资深守护
资深守护

先把所有数输入,然后在一个一个判断是否放入,如没有放,就存入数组,存完在输出,回溯一步。

 

0
张瑀涵
张瑀涵
高级光能
高级光能

void search(int x)
{
 if(x>n)//元素数量不能大于规定的指定目标。
 {
  for(int i=1;i<=n;i++)
   cout<<a[i]<<" ";
  cout<<endl;//输出这些数列。
 }
 for(int i=1;i<=n;i++)
 {
  if(visited[i]==false)//如果数没有使用
  {
   a[x]=i;//这个数列的第x个变量是i;
   visited[i]=true;//这个数量不能使用;
   search(x+1);//继续查找下一个变量是谁;
   visited[i]=false;//为了能够回溯。
  }
 }
}//这是全排列函数

最后加search(1)

0
臧启亚
臧启亚
初级光能
初级光能

哪一题

可以发一下题号吗

0
高亮节
高亮节
资深守护
资深守护
void search(int x)
{
    if(x>n)
    {
        for(int i=1;i<=n;i++)
        {
            cout<<a[i]<<' ';
        }
        cout<<endl;
        return ;
    }
    for(int i=1;i<=n;i++)
    {
        if(visited[i]==false)
        {
            a[x]=i;
            visited[i]=true;
            search(x+1);
            visited[i]=false;
        }
    }
}
0
0
0
高亮节
高亮节
资深守护
资深守护
void search(int x)
{
    if(x>n)
    {
        for(int i=1;i<=n;i++)
        {
            cout<<a[i]<<' ';
        }
        cout<<endl;
        return ;
    }
    for(int i=1;i<=n;i++)
    {
        if(visited[i]==false)
        {
            a[x]=i;
            visited[i]=true;
            search(x+1);
            visited[i]=false;
        }
    }
}
0
0
0
0
0
0
陆麟瑞
陆麟瑞
资深天翼
资深天翼

深度优先搜索dfs

void print(){
     total++;
    for(int i=1; i<=r; i++)
    cout<<a[i]<<' ';
    cout<<endl;
} 
void search(int t)
{
    int i;
    if(t>r) {
        print();
        return;
    }
    for(int i=1; i<=n; i++){
        if(!b[i]){
            a[t]=i;
            b[i]=true;
            search(t+1);
            a[t]=0;
            b[i]=false; 
        }
    } 
}
0
我要回答