[ create a new paste ] login | about

Link: http://codepad.org/bO7Zg25g    [ raw code | output | fork ]

C++, pasted on Nov 5:
#include <cstdio>
#include <vector>
#include <algorithm>

template <typename F> void solve(int n, std::vector<int> &st, F f) {
    int size = int(st.size());
    if (n == size) {
	f(&st[0], size);
	return;
    }
    for (int x = 1; x <= size; ++x) {
	bool safe = true;
	for (int i = 0; i < n && safe; ++i)
	    if (st[i] == x || std::abs(st[i] - x) == n - i)
		safe = false;
	if (safe) {
	    st[n] = x;
	    solve(n + 1, st, f);
	}
    }
}
template <typename F> void queens(int size, F f)
{
    std::vector<int> state(size);
    solve(0, state, f);
}

void print(const int *p, size_t size)
{
    for (size_t i = 0; i < size; ++i)
	std::printf("(%d %d)", p[i], i + 1);
    std::putchar('\n');
}

int main()
{
    queens(8, print);
}

/*
struct collect {
    std::vector<std::vector<int> > result;
    void operator ()(const int *p, size_t size) {
	result.push_back(std::vector<int>(p, p + size));
    }
};

#include <windows.h>

int main()
{
    DWORD now = GetTickCount();
    for (int i = 0; i < 100; ++i)
	queens(8, collect());
    std::printf("%d\n", GetTickCount() - now);
}
*/


Output:
(1 1)(5 2)(8 3)(6 4)(3 5)(7 6)(2 7)(4 8)
(1 1)(6 2)(8 3)(3 4)(7 5)(4 6)(2 7)(5 8)
(1 1)(7 2)(4 3)(6 4)(8 5)(2 6)(5 7)(3 8)
(1 1)(7 2)(5 3)(8 4)(2 5)(4 6)(6 7)(3 8)
(2 1)(4 2)(6 3)(8 4)(3 5)(1 6)(7 7)(5 8)
(2 1)(5 2)(7 3)(1 4)(3 5)(8 6)(6 7)(4 8)
(2 1)(5 2)(7 3)(4 4)(1 5)(8 6)(6 7)(3 8)
(2 1)(6 2)(1 3)(7 4)(4 5)(8 6)(3 7)(5 8)
(2 1)(6 2)(8 3)(3 4)(1 5)(4 6)(7 7)(5 8)
(2 1)(7 2)(3 3)(6 4)(8 5)(5 6)(1 7)(4 8)
(2 1)(7 2)(5 3)(8 4)(1 5)(4 6)(6 7)(3 8)
(2 1)(8 2)(6 3)(1 4)(3 5)(5 6)(7 7)(4 8)
(3 1)(1 2)(7 3)(5 4)(8 5)(2 6)(4 7)(6 8)
(3 1)(5 2)(2 3)(8 4)(1 5)(7 6)(4 7)(6 8)
(3 1)(5 2)(2 3)(8 4)(6 5)(4 6)(7 7)(1 8)
(3 1)(5 2)(7 3)(1 4)(4 5)(2 6)(8 7)(6 8)
(3 1)(5 2)(8 3)(4 4)(1 5)(7 6)(2 7)(6 8)
(3 1)(6 2)(2 3)(5 4)(8 5)(1 6)(7 7)(4 8)
(3 1)(6 2)(2 3)(7 4)(1 5)(4 6)(8 7)(5 8)
(3 1)(6 2)(2 3)(7 4)(5 5)(1 6)(8 7)(4 8)
(3 1)(6 2)(4 3)(1 4)(8 5)(5 6)(7 7)(2 8)
(3 1)(6 2)(4 3)(2 4)(8 5)(5 6)(7 7)(1 8)
(3 1)(6 2)(8 3)(1 4)(4 5)(7 6)(5 7)(2 8)
(3 1)(6 2)(8 3)(1 4)(5 5)(7 6)(2 7)(4 8)
(3 1)(6 2)(8 3)(2 4)(4 5)(1 6)(7 7)(5 8)
(3 1)(7 2)(2 3)(8 4)(5 5)(1 6)(4 7)(6 8)
(3 1)(7 2)(2 3)(8 4)(6 5)(4 6)(1 7)(5 8)
(3 1)(8 2)(4 3)(7 4)(1 5)(6 6)(2 7)(5 8)
(4 1)(1 2)(5 3)(8 4)(2 5)(7 6)(3 7)(6 8)
(4 1)(1 2)(5 3)(8 4)(6 5)(3 6)(7 7)(2 8)
(4 1)(2 2)(5 3)(8 4)(6 5)(1 6)(3 7)(7 8)
(4 1)(2 2)(7 3)(3 4)(6 5)(8 6)(1 7)(5 8)
(4 1)(2 2)(7 3)(3 4)(6 5)(8 6)(5 7)(1 8)
(4 1)(2 2)(7 3)(5 4)(1 5)(8 6)(6 7)(3 8)
(4 1)(2 2)(8 3)(5 4)(7 5)(1 6)(3 7)(6 8)
(4 1)(2 2)(8 3)(6 4)(1 5)(3 6)(5 7)(7 8)
(4 1)(6 2)(1 3)(5 4)(2 5)(8 6)(3 7)(7 8)
(4 1)(6 2)(8 3)(2 4)(7 5)(1 6)(3 7)(5 8)
(4 1)(6 2)(8 3)(3 4)(1 5)(7 6)(5 7)(2 8)
(4 1)(7 2)(1 3)(8 4)(5 5)(2 6)(6 7)(3 8)
(4 1)(7 2)(3 3)(8 4)(2 5)(5 6)(1 7)(6 8)
(4 1)(7 2)(5 3)(2 4)(6 5)(1 6)(3 7)(8 8)
(4 1)(7 2)(5 3)(3 4)(1 5)(6 6)(8 7)(2 8)
(4 1)(8 2)(1 3)(3 4)(6 5)(2 6)(7 7)(5 8)
(4 1)(8 2)(1 3)(5 4)(7 5)(2 6)(6 7)(3 8)
(4 1)(8 2)(5 3)(3 4)(1 5)(7 6)(2 7)(6 8)
(5 1)(1 2)(4 3)(6 4)(8 5)(2 6)(7 7)(3 8)
(5 1)(1 2)(8 3)(4 4)(2 5)(7 6)(3 7)(6 8)
(5 1)(1 2)(8 3)(6 4)(3 5)(7 6)(2 7)(4 8)
(5 1)(2 2)(4 3)(6 4)(8 5)(3 6)(1 7)(7 8)
(5 1)(2 2)(4 3)(7 4)(3 5)(8 6)(6 7)(1 8)
(5 1)(2 2)(6 3)(1 4)(7 5)(4 6)(8 7)(3 8)
(5 1)(2 2)(8 3)(1 4)(4 5)(7 6)(3 7)(6 8)
(5 1)(3 2)(1 3)(6 4)(8 5)(2 6)(4 7)(7 8)
(5 1)(3 2)(1 3)(7 4)(2 5)(8 6)(6 7)(4 8)
(5 1)(3 2)(8 3)(4 4)(7 5)(1 6)(6 7)(2 8)
(5 1)(7 2)(1 3)(3 4)(8 5)(6 6)(4 7)(2 8)
(5 1)(7 2)(1 3)(4 4)(2 5)(8 6)(6 7)(3 8)
(5 1)(7 2)(2 3)(4 4)(8 5)(1 6)(3 7)(6 8)
(5 1)(7 2)(2 3)(6 4)(3 5)(1 6)(4 7)(8 8)
(5 1)(7 2)(2 3)(6 4)(3 5)(1 6)(8 7)(4 8)
(5 1)(7 2)(4 3)(1 4)(3 5)(8 6)(6 7)(2 8)
(5 1)(8 2)(4 3)(1 4)(3 5)(6 6)(2 7)(7 8)
(5 1)(8 2)(4 3)(1 4)(7 5)(2 6)(6 7)(3 8)
(6 1)(1 2)(5 3)(2 4)(8 5)(3 6)(7 7)(4 8)
(6 1)(2 2)(7 3)(1 4)(3 5)(5 6)(8 7)(4 8)
(6 1)(2 2)(7 3)(1 4)(4 5)(8 6)(5 7)(3 8)
(6 1)(3 2)(1 3)(7 4)(5 5)(8 6)(2 7)(4 8)
(6 1)(3 2)(1 3)(8 4)(4 5)(2 6)(7 7)(5 8)
(6 1)(3 2)(1 3)(8 4)(5 5)(2 6)(4 7)(7 8)
(6 1)(3 2)(5 3)(7 4)(1 5)(4 6)(2 7)(8 8)
(6 1)(3 2)(5 3)(8 4)(1 5)(4 6)(2 7)(7 8)
(6 1)(3 2)(7 3)(2 4)(4 5)(8 6)(1 7)(5 8)
(6 1)(3 2)(7 3)(2 4)(8 5)(5 6)(1 7)(4 8)
(6 1)(3 2)(7 3)(4 4)(1 5)(8 6)(2 7)(5 8)
(6 1)(4 2)(1 3)(5 4)(8 5)(2 6)(7 7)(3 8)
(6 1)(4 2)(2 3)(8 4)(5 5)(7 6)(1 7)(3 8)
(6 1)(4 2)(7 3)(1 4)(3 5)(5 6)(2 7)(8 8)
(6 1)(4 2)(7 3)(1 4)(8 5)(2 6)(5 7)(3 8)
(6 1)(8 2)(2 3)(4 4)(1 5)(7 6)(5 7)(3 8)
(7 1)(1 2)(3 3)(8 4)(6 5)(4 6)(2 7)(5 8)
(7 1)(2 2)(4 3)(1 4)(8 5)(5 6)(3 7)(6 8)
(7 1)(2 2)(6 3)(3 4)(1 5)(4 6)(8 7)(5 8)
(7 1)(3 2)(1 3)(6 4)(8 5)(5 6)(2 7)(4 8)
(7 1)(3 2)(8 3)(2 4)(5 5)(1 6)(6 7)(4 8)
(7 1)(4 2)(2 3)(5 4)(8 5)(1 6)(3 7)(6 8)
(7 1)(4 2)(2 3)(8 4)(6 5)(1 6)(3 7)(5 8)
(7 1)(5 2)(3 3)(1 4)(6 5)(8 6)(2 7)(4 8)
(8 1)(2 2)(4 3)(1 4)(7 5)(5 6)(3 7)(6 8)
(8 1)(2 2)(5 3)(3 4)(1 5)(7 6)(4 7)(6 8)
(8 1)(3 2)(1 3)(6 4)(2 5)(5 6)(7 7)(4 8)
(8 1)(4 2)(1 3)(3 4)(6 5)(2 6)(7 7)(5 8)


Create a new paste based on this one


Comments: