POJ 1166 The Clocks 撥鐘問題

2021-07-24 08:26:00 字數 1403 閱讀 4631

有9個時鐘,排成乙個3*3的矩陣。

現在需要用最少的移動,將9個時鐘的指標都撥到12點的位置。共允許有9種不同的移動。如下表所示,每個移動會將若干個時鐘的指標沿順時針方向撥動90度。

移動 影響的時鐘

1 abde

2 abc

3 bcef

4 adg

5 bdefh

6 cfi

7 degh

8 ghi

9 efhi

從標準輸入裝置讀入9個整數,表示各時鐘指標的起始位置。0=12點、1=3點、2=6點、3=9點。

輸出乙個最短的移動序列,使得9個時鐘的指標都指向12點。按照移動的序號大小,輸出結果。

3 3 0

2 2 2

2 1 2

4 5 8 9

從上面的介紹中我們可以看出每次撥動指標轉90度,那麼有效的撥動數則只能是0、1、2、3,因為比如又再撥動一次就又會重複撥動0次的效果。所以乙個移動方案有4種不同的撥動方式,一共有9個移動方案,那麼可能的解就有4^9個。

此題只要求我們求最小移動的次數,那麼在列舉的過程中如果發現當前列舉的情況已超過最小移動次數時則可以直接放棄嘗試此解,減少列舉的次數。

#include 

#include

using namespace std;

#define n 9

#define l 9

// a, b, c, d, e, f, g, h, i

int cases[l][n] = ,,

,,,,

,,};

int a[n];

int mincount = 4 * l + 1;

int result[l];

void guess(int (&count)[l], int l, int currentcount)

if (l == l)

if (sum % 4 != 0)

}if (j == n)

}return;

}int nextline = l + 1;

for(count[l] = 0; count[l] < 4; count[l]++)

}int main()

}if (isresult)

//記錄採取方案的次數

intcount[l];

guess(count, 0, 0);

for(int i = 0; i < l; i++)

}return

0;}

POJ 1166 Gauss消元 取模

o o o a b c o o o d e f o o o g h i figure 1 move affected clocks 1 abde 2 abc 3 bcef 4 adg 5 bdefh 6 cfi 7 degh 8 ghi 9 efhi figure 2 your program is...

1166 交換輸出

交換輸出 time limit 1000ms memory limit 65536k total submit 75 accepted 57 description 輸入n n 100 個數,找出其中最小的數,將它與最前面的數交換後輸出這些數。如果這個第乙個數就是最小的數,則保持原樣輸出,如果最小的...

hdu 1166 敵兵布陣

這是一道線段樹里最簡單的一類題目了,單點更新型別!include define lson l m rt 1 define rson m 1 r rt 1 1 const int maxx 55555 int sum maxx 2 void pushup int rt void build int l...