//1차원 배열 이용, 가지치기 & 백트래킹. 8 Queen.변경가능.
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
ifstream fin("input.txt");
ofstream fout("output.txt");
int n,cnt=0;
int colc[20],ruc[20],luc[20],Q[8]={0};

void queen(int p){
	if(p>=n){
		cout << "[" << ++cnt << "]th" << endl;
		for(int i=0;i<n;i++){
			for(int j=0;j<n;j++){
				if(Q[i]==j)
					cout << "Q";
				else
					cout << "#";
			}
			cout << endl;
		}
		cout << endl;
	}
	else{
		for(int j=0;j<n;j++){
			if(colc[j]==0 && ruc[p+j]==0 && luc[p-j+n]==0){
				Q[p]=j;
				colc[j]=ruc[p+j]=luc[p-j+n]=1;
				queen(p+1);
				colc[j]=ruc[p+j]=luc[p-j+n]=0;
			}
		}
	}
}

void main(){
	n=8;
	for(int i=0;i<n*2;i++){
		colc[i]=ruc[i]=luc[i]=0;
	}
	queen(0);
}

#include <iostream>
#include <fstream>
#include <string>
using namespace std;
ifstream fin("input.txt");
ofstream fout("output.txt");
int a[8][8]={{0,1,0,1,0,1,0,0},
			{1,0,1,0,0,0,1,0},
			{0,1,0,1,0,0,0,1},
			{1,0,1,0,1,0,0,0},
			{0,0,0,1,0,1,0,1},
			{1,0,0,0,1,0,1,0},
			{0,1,0,0,0,1,0,1},
			{0,0,1,0,1,0,1,0}};
int node,start,index,check[30],cycle[30];

void hamilton(int i,int index){
	cycle[index]=i;
	check[i]=1;
	if(index == node-1 && a[i][start]==1){
		for(int j=0;j<node;j++)
			cout << cycle[j]+1 << " ";
		cout << endl;
	}
	else{
		for(int j=0;j<node;j++){
			if(a[i][j]==1 && check[j]==0){
				hamilton(j,index+1);
				check[j]=0;
			}
		}
	}
}
void main(){
	node=8; start=0;
	hamilton(start,0);
}
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
ifstream fin("input.txt");
ofstream fout("output.txt");

int a[6][6]={{0,1,1,0,1,1},
			{1,0,3,1,0,1},
			{1,3,0,1,1,0},
			{0,1,1,0,1,1},
			{1,0,1,1,0,1},
			{1,1,0,1,1,0}};
int node, edge, start, cycle[30];

void euler(int i,int index){
	cycle[index]=i;
	if(index == edge && i==start){ //i==start 생략시 오일러 경로
		for(int j=0;j<edge+1;j++)
			cout << cycle[j]+1 << " ";
		cout << endl;
	}
	else{
		for(int j=0;j<node;j++){
			if(a[i][j]>0){
				a[i][j]--;
				a[j][i]--;
				euler(j,index+1);
				a[i][j]++;
				a[j][i]++;
			}
		}
	}
}
void main(){
	node=6; edge=14; start=0;
	euler(start, 0);
}

+ Recent posts