日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

染色的立方体

發布時間:2025/3/15 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 染色的立方体 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Description

小胖最近迷上了3D物體,尤其是立方體。他手里有很多個立方體,他想讓所有的立方體全都長得一樣,所以他決定給某些立方體的表面重涂顏色,使得所有的立方體完全相同。但是小胖是很懶的,他想知道最少涂多少次顏色,可以讓所有立方體完全相同。

Input

輸入包含多組數據,每組數據第一行n(1<=n<=4),表示立方體的數量,接下來n行,每行6個字符串,表示立方體6個面的顏色:Color 1 Color 2 Color 3 Color 4 Color 5 Color 6,中間用一個空格隔開。
其中,面的標號如下:

n=0表示輸入結束。
兩個立方體被視為相同,當且僅當他們可以在某種擺放方式下,每個面的顏色都對應相同。
一種涂色的方案如下:

Output

每組數據,輸出一行一個整數,表示最少的涂色數。(涂一個面算一次涂色)

Sample Input

3
scarlet green blue yellow magenta cyan
blue pink green magenta cyan lemon
purple red blue yellow cyan green
2
red green blue yellow magenta cyan
cyan green blue yellow magenta red
2
red green gray gray magenta cyan
cyan green gray gray magenta red
2
red green blue yellow magenta cyan
magenta red blue yellow cyan green
3
red green blue yellow magenta cyan
cyan green blue yellow magenta red
magenta red blue yellow cyan green
3
blue green green green green blue
green blue blue green green green
green green green green green sea-green
3
red yellow red yellow red yellow
red red yellow yellow red yellow
red red red red red red
4
violet violet salmon salmon salmon salmon
violet salmon salmon salmon salmon violet
violet violet salmon salmon violet violet
violet violet violet violet salmon salmon
1
red green blue yellow magenta cyan
4
magenta pink red scarlet vermilion wine-red
aquamarine blue cyan indigo sky-blue turquoise-blue
blond cream chrome-yellow lemon olive yellow
chrome-green emerald-green green olive vilidian sky-blue
0

Sample Output

4
2
0
0
2
3
4
4
0
16
.
.
.
.
.
.

分析

首先寫出正方體有24個旋轉方式,然后以第一個正方體為標準,枚舉剩下n - 1個正方體的狀態,然后計算最小值。
.
.
.
.
.
.

程序:
#include<iostream> #include<stdio.h> #include<string.h> using namespace std; char name[30][30]; int n,ans,tj,c[30],s[30][30]; const int kn[24][6]= { {2, 1, 5, 0, 4, 3},{2, 0, 1, 4, 5, 3},{2, 4, 0, 5, 1, 3},{2, 5, 4, 1, 0, 3}, {4, 2, 5, 0, 3, 1},{5, 2, 1, 4, 3, 0},{1, 2, 0, 5, 3, 4},{0, 2, 4, 1, 3, 5}, {0, 1, 2, 3, 4, 5},{4, 0, 2, 3, 5, 1},{5, 4, 2, 3, 1, 0},{1, 5, 2, 3, 0, 4}, {5, 1, 3, 2, 4, 0},{1, 0, 3, 2, 5, 4},{0, 4, 3, 2, 1, 5},{4, 5, 3, 2, 0, 1}, {1, 3, 5, 0, 2, 4},{0, 3, 1, 4, 2, 5},{4, 3, 0, 5, 2, 1},{5, 3, 4, 1, 2, 0}, {3, 4, 5, 0, 1, 2},{3, 5, 1, 4, 0, 2},{3, 1, 0, 5, 4, 2},{3, 0, 4, 1, 5, 2}, }; int max(int x,int y) {if (x>=y) return x; else return y; } int min(int x,int y) {if (x>=y) return y; else return x; }int find(char* str) { for (int i=0;i<tj;i++) if (strcmp(name[i],str)==0) return i; strcpy(name[tj],str); return tj++; } void init() { ans=30; tj=0; memset(name,0,sizeof(name)); memset(c,0,sizeof(c)); char w[30]; for (int i=0;i<n;i++) { for (int j=0;j<6;j++) { scanf("%s",w); int id=find(w); s[i][j]=id;} } } void work() { int v[30],sum=0; for (int i=0;i<6;i++) { memset(v,0,sizeof(v)); int t=0; for (int j=0;j<n;j++) { v[s[j][kn[c[j]][i]]]++; t=max(t,v[s[j][kn[c[j]][i]]]); } sum+=n-t; } ans=min(sum,ans); } void dfs(int d) { if (d>=n) { work(); return; } for (c[d]=0;c[d]<24;c[d]++) dfs(d+1); } int main() { cin>>n;while (n!=0) { init(); dfs(1); cout<<ans<<endl;cin>>n;} return 0; }

轉載于:https://www.cnblogs.com/YYC-0304/p/9499947.html

總結

以上是生活随笔為你收集整理的染色的立方体的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。