Nim 게임 과 풀 배열.

Nim 게임 은 수학 게임 이론 문제 로 바 이 너 리 의 이 또는 연산 으로 바 꿀 수 있 습 니 다. 비록 자신 이 아직 잘 모 르 지만 코드 를 먼저 붙 이 고 좋 은 블 로그 도 있 습 니 다.
http://blog.csdn.net/u013050857/article/details/46417307
http://blog.csdn.net/fanoluo/article/details/40663065
주로 이상 하거나 상황 이 0 이면 선 수 는 반드시 지고 그렇지 않 으 면 선 수 는 반드시 이긴다.
전체 배열 하면 C + + 중 하나의 직접 라 이브 러 리 함수 가 호출 될 수 있 습 니 다. next 입 니 다.permutation 은 이 라 이브 러 리 함 수 를 사용 할 때 배열 을 정렬 한 다음 에 이 라 이브 러 리 함 수 를 사용 할 수 있 습 니 다.
#include<iostream>
#include<algorithm>
#include<cstring>
#include<string>
using namespace std;
int main() {
	int temp[4] = {1,2,3,4};
 sort(temp,temp + 4);
 do{
	 for(int i = 0; i < 4; i++)
		 cout<<temp[i];
	 cout<<endl;
}while(next_permutation(temp,temp + 4));
 return 0;
}
재 귀적 인 방법 으로 도 가능 합 니 다. 주로 심층 검색 의 실현 입 니 다. 각 층 이 방문 되 지 않 았 다 면 할당 을 하고 다음 층 을 검색 합 니 다. 0 층 에서 시작 되 었 기 때문에 n 층 만 찾 으 면 됩 니 다. 배열 은 0 에서 시작 되 기 때 문 입 니 다.
#include<iostream>
#include<cstring>
using namespace std; 
//                                           
int n,temp[100],vis[100],res[100],cnt;
void dfs(int cur) {
	//                    
	if(cur == n){
	    cnt++;
		for(int i = 0;i < n; i++)
		cout<<temp[i];
		cout<<endl;
		return;
	}else{
		for(int i = 0; i < n;i++) {
			//                    
			if(!vis[i]){
				vis[i] = 1;
				temp[cur] = res[i];
				dfs(cur + 1);
				//                  0 
				vis[i] = 0;
			}
		}
	}
} 
int main() {
	cin>>n;
	for(int i = 0 ; i < n; i++)
	cin>>res[i];
	cnt = 0;
	memset(vis,0,sizeof(vis));
	//  0       
	dfs(0);
	cout<<cnt;
	return 0;
}

좋은 웹페이지 즐겨찾기