zoukankan      html  css  js  c++  java
  • 全排列/递归/八皇后问题

    分别交换第1个元素与第2、3、4、5..len-1个元素
    void permutation(char *str,int begin,int len){
    	
    	if(len==1){
    		printf("%s\n",str);
    		count++;
    		return;	
    	}
    	char  tmp = str[begin];
    	for(int i=0;i<len;i++){
    		char  tmp2=str[begin+i];
    		str[begin] = tmp2;
    		str[begin+i] = tmp;
    		permutation(str,begin+1,len-1);
    		str[begin] = tmp;
    		str[begin+i]=tmp2;
    	}
    	
    }
    	
     
            char str[6];
    	strcpy(str,"12345");
    	permutation(str,0,5);



    求所有组合:http://zhedahht.blog.163.com/blog/static/2541117420114172812217/
     

    void Combination(char* string, int number, vector<char>& result);
    void Combination(char* string)
    
    {
    	
        if(string == NULL)
    		
            return;
    	
    	
    	
        int length = strlen(string);
    	
        vector<char> result;
    	
        for(int i = 1; i <= length; ++ i)
    		
        {
    		
            Combination(string, i, result);
    		
        }
    	
    }
    
    
    
    void Combination(char* string, int number, vector<char>& result)
    
    {
    	
        if(number == 0)
    		
        {
    		
            vector<char>::iterator iter = result.begin();
    		
            for(; iter < result.end(); ++ iter)
    			
                printf("%c", *iter);
    		
            printf("\n");
    		
    		
    		
            return;
    		
        }
    	
    	
    	
        if(*string == '\0')
    		
            return;
    	
    	
    	
    //一个字符有两种选择
        result.push_back(*string);
    	
        Combination(string + 1, number - 1, result);
    
        result.pop_back();	
        
        Combination(string + 1, number, result);
    	
    }

    ----------------------------------------------------------------------------

    八皇后问题:col,row+col,row-col三个标记数组

    // 8QUEEN.cpp : Defines the entry point for the console application.
    //
    
    #include "stdafx.h"
    #include <iostream>
    using namespace std;
    const int SIZE = 8;
    const int OFFSET = SIZE -1;
    const int FLAT_SIZE = 3*SIZE-2;//2*(SIZE-1)+(SIZE-1)+1
    int sov[SIZE];
    bool hasa[FLAT_SIZE]={false};
    bool hasb[FLAT_SIZE]={false};
    bool hasc[SIZE]={false};
    bool couldStand(int r,int c){
    	
    	return !hasc[c]&&!hasa[r+c+OFFSET]&&!hasb[r-c+OFFSET];
    }
    int m_count = 0;
    void t(int r){
    	
    	
    	for(int c=0;c<SIZE;c++){	
    		
    		if(couldStand(r,c)){
    			sov[r]=c;
    			hasa[r+c+OFFSET]=true;
    			hasb[r-c+OFFSET]=true;
    			hasc[c]=true;
    			if(r==OFFSET){
    				for(int i=0;i<SIZE;i++)
    					printf("%d ",sov[i]+1);
    				printf("\n");
    				m_count++;
    			}else t(r+1);
    			hasa[r+c+OFFSET]=false;
    			hasb[r-c+OFFSET]=false;
    			hasc[c]=false;
    		}
    	}
    	
    
    }
    int main(int argc, char* argv[])
    {
    	memset(hasc,false,sizeof(hasc));
    	t(0);
    	printf("Hello World %d!\n",m_count);
    	return 0;
    }
  • 相关阅读:
    vmware ubuntu 异常关机无法连接到网络
    Speed up GCC link
    常用的一些解压命令
    Log4j 漏洞复现
    Test Case Design method Boundary value analysis and Equivalence partitioning
    CCA (Citrix Certified Administrator) exam of “Implementing Citrix XenDesktop 4”
    What is Key Word driven Testing?
    SAP AGS面试小结
    腾讯2013终端实习生一面
    指针的引用
  • 原文地址:https://www.cnblogs.com/yangyh/p/2083202.html
Copyright © 2011-2022 走看看