7 条题解

  • 6
    @ 2023-7-23 17:03:35
    思路 简单的全排列问题,直接DFS可以轻松解决,只需要注意回溯就不会错,dfs下一个节点之后,将vis[i]重新置为flase
    代码
    
    #include <iostream>
    #include <cmath>
    using namespace std;
    int n, a[15];
    bool vis[15];
    void dfs(int cnt)
    {
        if (cnt == n + 1)
        {
            for (int i = 1; i <= n; i++)
                cout << a[i] << " ";
            cout << endl;
            return;
        }
        for (int i = 1; i <= n; i++)
        {
            if (!vis[i])
            {
                vis[i] = true;
                a[cnt] = i;
                dfs(cnt + 1);
                vis[i] = false;
            }
        }
    }
    int main()
    {
        cin >> n;
        dfs(1);
        return 0;
    }
    
    
    • @ 2023-8-8 9:00:44

      这种题解是咋发的

    • @ 2023-11-5 14:06:20

      @ < d e t a i l s = "" > 你的内容 记得把空格去掉

    • @ 2023-12-4 15:46:06

      @ < d e t a i l s = "" > < s u m m a r y > 你 的 内 容 < / s u m m a r y >

      记得把空格去掉

    • @ 2023-12-10 16:31:45
      代码:< d e t a i l s > 正文内容 < s u m m a r y > 标题,记得去除所有空格 < / s u m m a r y 点我

      嘿嘿嘿,就不告诉你哪来的~

    • @ 2023-12-10 16:37:04

      @

      代码:< d e t a i l s > 正文内容 < s u m m a r y > 标题,记得去除所有空格 < / s u m m a r y > 点我
  • 3
    @ 2024-2-5 13:24:19

    首先看一下这道题的数据范围,1<=n<=9,非常小,最多只会有9!种排列方式,所以不用太考虑时间复杂度,dfs完全可以胜任

    #include <bits/stdc++.h>
    using namespace std;
    bool b[15];
    int a[15];
    int n;
    void dfs(int x)
    {
    	if (x == n + 1)
    	{
    		for (int i = 1;i <= n;i++)
    		{
    			cout << a[i] << " ";
    		}
    		cout << endl;
    		return;
    	}
    	for (int i = 1;i <= n;i++)
    	{
    		if (!b[i])
    		{
    			a[x] = i;
    			b[i] = 1;
    			dfs(x+1);
    			b[i] = 0;
    		}
    	}
    }
    int main()
    {
    	cin >> n;
    	dfs(1);
    	return 0;
    }//已AC
    
    • 3
      @ 2024-2-2 17:00:26
      #include <bits/stdc++.h>
      using namespace std;
      int main(){
          int n,a[13];
          cin>>n;
          for(int i=1;i<=n;i++)a[i]=i;
          do{
              for(int i=1;i<=n;i++)cout<<a[i]<<' ';
              cout<<endl;
          }while(next_permutation(a+1,a+n+1));
          return 0;
      }
      
      
      • 2
        @ 2023-8-15 19:12:43

        曾经有类似的,把代码改了一下。

        #include <bits/stdc++.h>
        using namespace std;
        int main()
        {
        	int n,a[10];
        	cin>>n;
        	for (int i=1;i<=n;i++)
        	{
        		a[i]=i;
        	}
        	sort(a+1,a+n+1);
        	do
        	{
        		for (int i=1;i<=n;i++)
        		{
        			cout<<a[i]<<" ";
        		}
        		cout<<endl;
        	}while(next_permutation(a+1,a+n+1));
        	return 0;
        }
        
        • 0
          @ 2024-2-7 19:11:37
          #include <bits/stdc++.h>
          using namespace std;
          int n,a[11];
          int main()
          {
              cin >> n;
              for(int i = 1;i <= n;i++)
              {
                  a[i] = i;
              }
              do
              {
                  for(int i = 1;i <= n;i++)
                  {
                      cout << a[i] << " ";
                  }
                  cout << endl;
              }while(next_permutation(a+1,a+n+1));
              return 0;
          }
          
          • -3
            @ 2024-4-27 12:17:18

            < d e t a i l s = "" >

            • -4
              @ 2023-12-16 21:20:42

              < d e t a i l s = "" > < s u m m a r y > 你 的 内 容 < / s u m m a r y >

              • 1

              信息

              ID
              330
              时间
              1000ms
              内存
              256MiB
              难度
              1
              标签
              (无)
              递交数
              478
              已通过
              354
              上传者