[暴力]poj1166

題意:
給出9【A-I】個表,9中操作,每種操作只能撥動部分表,
Move Affected clocks
1 ABDE

2 ABC

3 BCEF

4 ADG

5 BDEFH

6 CFI

7 DEGH

8 GHI

9 EFHI
問,最少幾步把表都撥到12點?

分析:
這個題每種撥法不能超過4次,這就類似翻轉棋子了,4次就回到了原來的地方,沒必要。所以,那問題就簡化很多了,每種操作不多於3次。那如何選擇最短路呢?因爲這些順序是無關的,先執行哪個動作都可以,所以順序是可以隨便寫的。改變順序不影響結果。

#include <cstdio>
#include <cstring>
#include <cmath>
#include <iostream>
#include <vector>
#include <map>
#include <queue>
#include <algorithm>
#define read freopen("q.in","r",stdin)
#define LL long long
#define maxn 1000
using namespace std;
int mp[maxn];

int main()
{
  //  read;
    int i,j;
    for(i=1;i<=9;i++)cin>>mp[i];
    int i1,i2,i3,i4,i5,i6,i7,i8,i9;
    for(i2=0;i2<4;i2++)
    for(i1=0;i1<4;i1++)
    for(i3=0;i3<4;i3++)
    for(i4=0;i4<4;i4++)
    for(i5=0;i5<4;i5++)
    for(i6=0;i6<4;i6++)
    for(i7=0;i7<4;i7++)
    for(i8=0;i8<4;i8++)
    for(i9=0;i9<4;i9++)
    {
        int tmp1=(mp[1]+i1+i2+i4)%4;
        int tmp2=(mp[2]+i1+i2+i3+i5)%4;
        int tmp3=(mp[3]+i2+i3+i6)%4;
        int tmp4=(mp[4]+i1+i4+i5+i7)%4;
        int tmp5=(mp[5]+i1+i3+i5+i7+i9)%4;
        int tmp6=(mp[6]+i3+i5+i6+i9)%4;
        int tmp7=(mp[7]+i4+i7+i8)%4;
        int tmp8=(mp[8]+i5+i7+i8+i9)%4;
        int tmp9=(mp[9]+i6+i8+i9)%4;

        if(tmp1==0 && tmp2==0 && tmp3==0 && tmp4==0 && tmp5==0 && tmp6==0
        && tmp7==0 && tmp8==0 && tmp9==0)
        {
            for(int k1=0;k1<i1;k1++)cout<<"1 ";
            for(int k2=0;k2<i2;k2++)cout<<"2 ";
            for(int k3=0;k3<i3;k3++)cout<<"3 ";
            for(int k4=0;k4<i4;k4++)cout<<"4 ";
            for(int k5=0;k5<i5;k5++)cout<<"5 ";
            for(int k6=0;k6<i6;k6++)cout<<"6 ";
            for(int k7=0;k7<i7;k7++)cout<<"7 ";
            for(int k8=0;k8<i8;k8++)cout<<"8 ";
            for(int k9=0;k9<i9;k9++)cout<<"9 ";
            cout<<endl;
            return 0;

        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章