dfs:数芝麻-牛客+实际问题-牛客

数芝麻dfs-牛客

暴力搜索

代码;

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e2+10;
const int mod=142857;
const int inf=0x3f3f3f3f;
typedef long long ll;
typedef pair<int,int> pii;
int a[maxn][maxn];
int vis[maxn][maxn];
int dir[4][2]={0,1,1,0,0,-1,-1,0};
int sum;

void dfs(int x,int y)
{
    sum++;
    for(int i=0; i<4; i++)
    {
        int nx=x+dir[i][0];
        int ny=y+dir[i][1];
        if(!vis[nx][ny]&&a[nx][ny]==1)
        {
            vis[nx][ny]=1;
            dfs(nx,ny);
        }
    }
}
 int main()
 {
     int n,m;
     while(cin>>n>>m)
     {
         if(n==0&&m==0) break;
         int flag=0;
         for(int i=1; i<=n; i++)
          for(int j=1; j<=n; j++)
            cin>>a[i][j];
        for(int i=1; i<=n; i++)
        {
            if(flag) break;
            for(int j=1; j<=n; j++)
            {
                if(!vis[i][j]&&a[i][j]==1)
                {
                    sum=0;
                    vis[i][j]=1;
                    dfs(i,j);
                    if(sum==m)
                    {
                        flag=1;
                        break;
                    }
                }
            }
        }
            if(flag) cout<<"YES
";
            else cout<<"NO
";
     }
     system("pause");
     return 0;
 }

实际问题 dfs-牛客

直接搜索

代码:

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+10;
const int mod=142857;
const int inf=0x3f3f3f3f;
typedef long long ll;
typedef pair<int,int> pii;
int ans,flag;
int a[maxn];
int n,m,k;

ll qs(ll a,ll b)
{
    ll sum=0;
    while(b)
    {
        if(b&1) sum*=a;
        a*=a;
        b>>=1;
    }
    return sum;
}

void dfs(int num,int cnt)
{
    if(flag) return ;
    if(cnt==m+1)
    {
      ans++;
      if(ans==k)
      {
        for(int i=1; i<=m; i++)
         cout<<a[i]<<" ";
        cout<<endl;
        flag=1;
        return ;
      }
      return ;
    }
    for(int i=num; i<=n-m+cnt; i++)
    {
        a[cnt]=i;
        dfs(i+1,cnt+1);
        if(flag) return ;
    }
}
 int main()
 {
    int t;
    cin>>t;
    while(t--)
    {
        ans=0;
        flag=0;
        cin>>n>>m>>k;
        dfs(1,1);
    }
     system("pause");
     return 0;
 }

 

原文地址:https://www.cnblogs.com/sweetlittlebaby/p/13460515.html