程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> hdu 1027 Ignatius and the Princess II

hdu 1027 Ignatius and the Princess II

編輯:C++入門知識

求n個數全排列的第m個,,

深搜的順序就是排列的順序

8!=40320

給的m<=10000,所以只要排列八個數就可以了

 

 

 

 

 

[cpp]
#include<stdio.h>  
#include<string.h>  
int m,n,count,num[9],k,link[9]; 
void dfs(int u) 

    int i; 
    if(count==m)return; 
    if(u==9) 
    { 
        count++; 
        if(count==m) 
        { 
            if(n<=8) 
            { 
                printf("%d",num[k+1]-k); 
                for(i=k+2;i<=8;i++) 
                    printf(" %d",num[i]-k); 
                printf("\n"); 
            } 
            else  
            {   printf("1"); 
            for(i=2;i<=k;i++) 
                printf(" %d",i); 
            for(i=1;i<=8;i++) 
                printf(" %d",num[i]+k); 
            printf("\n"); 
            } 
        } 
    } 
    for(i=1;i<=8;i++) 
    { 
        if(link[i]==0) 
        { 
            link[i]=1; 
            num[u]=i; 
            dfs(u+1); 
            link[i]=0; 
        } 
    } 

int main() 

    int i,j; 
    while(scanf("%d%d",&n,&m)!=-1) 
    { 
        memset(num,0,sizeof(num)); 
        memset(link,0,sizeof(link)); 
        count=0; 
        if(n<8) 
            k=8-n; 
        else k=n-8; 
        dfs(1); 
    } 
    return 0; 

#include<stdio.h>
#include<string.h>
int m,n,count,num[9],k,link[9];
void dfs(int u)
{
 int i;
 if(count==m)return;
 if(u==9)
 {
  count++;
  if(count==m)
  {
   if(n<=8)
   {
    printf("%d",num[k+1]-k);
    for(i=k+2;i<=8;i++)
     printf(" %d",num[i]-k);
    printf("\n");
   }
   else
   { printf("1");
   for(i=2;i<=k;i++)
    printf(" %d",i);
   for(i=1;i<=8;i++)
    printf(" %d",num[i]+k);
   printf("\n");
   }
  }
 }
 for(i=1;i<=8;i++)
 {
  if(link[i]==0)
  {
   link[i]=1;
   num[u]=i;
   dfs(u+1);
   link[i]=0;
  }
 }
}
int main()
{
 int i,j;
 while(scanf("%d%d",&n,&m)!=-1)
 {
  memset(num,0,sizeof(num));
  memset(link,0,sizeof(link));
  count=0;
  if(n<8)
   k=8-n;
  else k=n-8;
  dfs(1);
 }
 return 0;
}

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved