U E D R , A S I H C RSS

Eight Queen Problem/nextream

8queen.html (javascript)


λͺ¨λ“  뢄듀이 C/C++ μ•„λ‹ˆλ©΄ νŒŒμ΄μ„ μ΄λΌ, C둜 ν• κΉŒ ν•˜λ‹€κ°€ μ€ νŠΉμ΄ν•˜κ²Œ μžλ°”μŠ€ν¬λ¦½νŠΈλΌ μ¨λ΄€μŠ΅λ‹ˆλ‹€.

μ²˜μŒμ—” 2차원 λ°°μ—΄ λ©”λͺ¨λ¦¬ 곡간을 두고 λ©”λͺ¨λ¦¬ 상에 체크해 κ°€λ©° λ£¨ν”„λΌ λŒλ¦΄κΉŒ ν•˜λ‹€κ°€ 생각을 λ°”κΏ”μ„œ μž¬κ·€ν˜ΈμΆœμ„ μ΄μš©ν•˜κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€. 첫 λ¬Έμ œμ—μ„œ 일단 제일 첫 퀸은 무쑰건 (0,0) 이라고 κ³ μ •ν•˜κ³  μž¬κ·€λΌ λ‘λ²ˆμ§Έ ν€ΈλΆ€ν„° λŒλ ΈλŠ”λ°, 였히렀 λ‚˜μ€‘μ— 이 생각이 λ‘λ²ˆμ§Έ 문제 ν’€λ•Œ λ”± ν•œκΈ€μžλ§Œ λ°”κΏ”μ„œ 적응이 λ˜λŠ” 것을 κ°€λŠ₯μΌ€ ν•œκ²ƒ κ°™μŠ΅λ‹ˆλ‹€.

μ›λž˜ 첫번째 해법은, ν•œκ°œλ§Œ 뽑든지, μ•„λ‹ˆλ©΄ 닀뽑든지 λ‘˜μ€‘ ν•˜λ‚˜μ˜€μ–΄μ•Ό ν•˜λŠ”λ°, κ²°λ‘ μ μœΌλ‘œλŠ” λ¬Έμ œλΌ ν’€κΈ΄ ν–ˆμ§€λ§Œ, μ–΄μ •μ©‘ν•œ λͺ¨μŠ΅μ΄ λ˜λ²„λ¦¬κ³  λ§μ•˜μŠ΅λ‹ˆλ‹€.

κΈ°λ³Έ μ•„μ΄λ””μ–΄λŠ” ν•œ 라인씩 진행해 κ°€λ©΄μ„œ ν˜„μž¬ 라인 μ„ μƒμ—μ„œ Xμ’Œν‘œκ°’μ„ λ°”κΏ”κ°€λ©° μœ„μ— μžˆλŠ” 퀸듀에 μ˜ν•΄ μœ„ν˜‘μ„ λ°›λŠ”μ§€ κ²€μ‚¬ν•΄μ„œ μ•ˆμ „ν•œ κ²½μš°μ—λŠ” 계속 λ‹€μŒ 라인으둜 μ§„ν–‰ν•˜κ³ , μ•„λ‹Œ κ²½μš°μ—λŠ” μ² μˆ˜ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. μœ„ν˜‘μ—¬λΆ€μ— λŒ€ν•΄μ„œλŠ” 같은 μ„Έλ‘œμ„ μƒμ΄κ±°λ‚˜, λŒ€κ°μ„ μΈ κ²½μš°λŠ” X, Y μ’Œν‘œμ˜ ν•©κ³Ό μ°¨κ°€ 각각 λ™μΌν•œ 것이 μžˆλŠ”μ§€λΌ μ‘°μ‚¬ν•˜λŠ” κ²ƒμœΌλ‘œ λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€.

~cpp 
<script>
var positions = [0,0,0,0,0,0,0,0];
function display() {
    for (var i=0; i<8; i++) document.write(positions[i] + " ");
    document.write("<br>");
}
function safe(line) {
    for (var i=0; i<line; i++)
        if (positions[line]==positions[i] || i+positions[i]==line+positions[line] || i-positions[i]==line-positions[line])
            return false;
    return true;
}
function check(line) {
    if (line>=8) { display(); return; }
    for (var i=0; i<8; i++) {
        positions[line] = i;
        if (safe(line)) check(line+1);
    }
}
check(1);
</script>


κ²°κ³Όλ¬Ό ν™•μΈν•˜κΈ° μ’‹κ²Œ display 뢀뢄을 μ•½κ°„ μˆ˜μ •ν•΄λ΄€μŠ΅λ‹ˆλ‹€. --1002
~cpp 
<script> 
var positions = [0,0,0,0,0,0,0,0]; 

function printBefore(position) {
    for (var j=0; j<position; j++)
        document.write("X"); 
}
function printAfter(position) {
    for (var j=position+1;j<8; j++)
        document.write("X");
}

function display() { 
    for (var i=0; i<8; i++) {
        printBefore(positions[i]);
        document.write("O");
        printAfter(positions[i]);
        document.write("<br>");
    }
    document.write("<br>"); 
} 
function safe(line) { 
    for (var i=0; i<line; i++) 
        if (positions[line]==positions[i] || i+positions[i]==line+positions[line] || i-positions[i]==line-positions[line]) 
            return false; 
    return true; 
} 
function check(line) { 
    if (line>=8) { display(); return; } 
    for (var i=0; i<8; i++) { 
        positions[line] = i; 
        if (safe(line)) check(line+1); 
    } 
} 
check(1); 
</script>


Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:23:13
Processing time 0.0103 sec