九宮格問題,要求:
按照下面的方式排列
橫向為x(從0到n-1),縱向為y方向(從0到n-1)
1、第一個數放在X方向的中間位置
2、其它數順次放置各個位置,並依據如下原則:(假設第一個數是a,第二個數是b)
以a為中心的位置關系分別為:
左上|上|右上
左 |a |右
左下|下|右下
(1)b放在a的右上位置。a(x,y)-->b(x+1,y-1)
(2)如果僅有“右”位置超過邊界,即x+1>n,則b(1,y-1)
(3)如果僅有“上”位置超過邊界,即y-1<0,則b(x+1,n)
(4)如果“右”“上”位置都超過邊界,即x+1>n,y-1 (5)如果“右上”已經有值,則b(x,y+1)
解決(Python)
#! /usr/bin/env python
#coding:utf-8
#判斷輸入的九宮格的格數是否為奇數(此處未使用,目的是對所輸入的數進行判斷)
def if_odd(n):
if n%2==1:
return True
else:
return False
#九宮格填寫數的法則
def sudoku_rule(n,sudoku):
tx = n/2
ty = 0
for i in range(n*n):
sudoku[ty][tx] = i+1
tx = tx+1
ty = ty-1
if ty<0 and tx>=n: #條件(4)
tx = tx-1
ty = ty+2
elif ty<0: #條件(3)
ty = n-1
elif tx>=n: #條件(2)
tx = 0
elif sudoku[ty][tx]!=0: #條件(5)
tx = tx-1
ty = ty+2
return sudoku
if __name__=="__main__":
n = 5
sudoku = [[0 for i in range(n)] for i in range(n)]
s = sudoku_rule(n,sudoku)
for line in s:
print line
說明:最後打印的結果和輸入的九宮格格數,都可以進一步修改。