2 条题解

  • 1
    @ 2022-11-15 20:43:08
    #include<iostream>
    #include<cstring>
    using namespace std;
    int a[10][10],n;//二维数组保存结果,n用来传递全局变量
    bool b[10][10],c[10][10];//分别用于判断当前数是否在这一行这一列出现过
    int print()//输出程序
    {
    for(int i=1;i<=n;i++)
    {
    cout<<a[i][1];
    for(int j=2;j<=n;j++)
    cout<<" "<<a[i][j];
    cout<<endl;
    }	
    exit(0);
    }
    void find(int s,int y,int x)//s:当前进行到第几个数;y:当前行;x:当前列
    {
    if(s>n*n) print();
    else for(int i=1;i<=n;i++)
    {
    if((!b[y][i])&&(!c[x][i]))
    {
    a[y][x]=i;
    b[y][i]=1;
    c[x][i]=1;
    if(s%n==0) find(s+1,y+1,1);
    else find(s+1,y,x+1);
    b[y][i]=0;
    c[x][i]=0;
    }
    }
    }
    int main()
    {
    memset(b,sizeof(b),0);
    memset(c,sizeof(c),0);
    cin>>n;
    find(1,1,1);//从第一个数第一行第一个开始填数
    return 0;
    }
    
    • 0
      @ 2023-3-10 21:00:35

      使用贪心策略,搜索方案 整体思路是搜索每一行的最小情况,从小到大搜索,则所输出的必定是最小情况 代码中一些变量含义 f:代表行列数 b[ ]:每行搜索时的已用数标记 c[ ][ ]:每列搜索已用数标记 d[ ]:每一行搜索结果 其余的都能在代码中轻易看出含义

      using namespace std;
      bool b[100];
      bool c[100][100];
      int d[100];
      int f;
      void print ()
      {
      	for (int i=0;i<f;i++)
      	{
      		printf ("%d ",d[i]);
      		c[i][d[i]]=1;
      	}
      	printf ("\n");
      }
      bool check (int i,int num)
      {
      	bool p;
      	if (b[i]==0&&c[num][i+1]==0)
      	p=1;
      	return p;
      }
      void search (int num)
      {
      	for (int i=0;i<f;i++)
      	if (check (i,num)==1)
      	{
      		d[num]=i+1;
      		b[i]=1;
      		if (num==f-1)
      		{
      			print ();
      			break;
      		}
      		else
      		search (num+1);
      		b[i]=0;
      	}
      }
      int main()
      {
      	cin>>f;
      	for (int i=0;i<f;i++)
      	{
      		search (0);
      		for (int j=0;j<=f;j++)
      		b[j]=0;
      	}
      	return 0;
      }
      

      “关注bilibili虚拟主播不知源深喵,关注不知源深谢谢喵”

      • 1

      信息

      ID
      449
      时间
      1000ms
      内存
      256MiB
      难度
      6
      标签
      递交数
      67
      已通过
      22
      上传者