蜂巢建圖

2018-03-17
蜂巢就是六邊形的堆積护锤,如何將蜂巢建圖同時(shí)找到蜂巢的規(guī)律,就是本文要討論的怒详,在此炉媒,我引入了兩道題,希望通過(guò)多角度的剖析昆烁,能讓讀者對(duì)此類(lèi)題更加熟悉吊骤。

POJ-2265 Bee Majia

Bee Majia

題意:找到左右兩圖對(duì)應(yīng)格子的數(shù)字關(guān)系,然后給你右圖數(shù)字善玫,輸出該格子對(duì)應(yīng)右圖的數(shù)字水援。

方法一:找規(guī)律。

#include <stdio.h>

struct node{
    int x,y;
    node(){}
    node(int a,int b){
        x=a; y=b;
    }
}a[100100];

int dir[5][2]={{-1,0},{0,-1},{1,-1},{1,0},{0,1}};

int main()
{
    for(int i=1,j=1,k=0;i<100100;i+=j,j+=6,k++){
        for(int m=0;m<k;m++){
            a[i-m]=node(m,k-m);
        }
        a[i]=node(0,k);

        int cur=i;
        for(int m=0;m<5;m++){
            for(int n=0;n<k;n++){
                int xx=a[cur].x+dir[m][0];
                int yy=a[cur].y+dir[m][1];
                a[cur+1]=node(xx,yy);
                cur++;
            }
        }
    }
    int n;
    while(scanf("%d",&n)!=EOF){
        printf("%d %d\n",a[n].x,a[n].y);
    }
}

(建議將dir中的點(diǎn)在直角坐標(biāo)系中表示出來(lái)茅郎,然后對(duì)應(yīng)左圖的坐標(biāo)蜗元,就能發(fā)現(xiàn)規(guī)律。其中值得注意的是:k的作用是控制圈數(shù)系冗,同時(shí)精髓就在第二個(gè)for中的第一語(yǔ)句和第二語(yǔ)句奕扣,這兩個(gè)地方做到了特殊點(diǎn)特殊處理!U凭础)

方法二:類(lèi)似的找規(guī)律惯豆,但是沒(méi)有打表池磁。

#include<stdio.h>
#include<math.h>
int main(){
    double x;
    int n,t,p,x0,y0,i;
    while(scanf("%d",&n)!=EOF){
        x=(sqrt(12*n-3)-3)/6;
        p=(int)x;
        if(3*p*p+3*p+1!=n){
            t=n-(3*p*p+3*p+1);
            p++;
            x0=p-1;
            y0=0;
            while(t){
                t--;
                y0++;
                for(i=1;i<=p-1&&t;i++,t--)x0--,y0++;
                for(i=1;i<=p&&t;i++,t--)x0--;
                for(i=1;i<=p&&t;i++,t--)y0--;
                for(i=1;i<=p&&t;i++,t--)x0++,y0--;
                for(i=1;i<=p&&t;i++,t--)x0++;
                for(i=1;i<=p&&t;i++,t--)y0++;
            }
            printf("%d %d\n",x0,y0);
        }
        else
            printf("%d 0\n",p);
    }
    return 0;
}

這段代碼取自隨心所欲
Ta講的非常詳細(xì)了,在此并不贅述楷兽。其實(shí)思想都是一樣的地熄,不過(guò)我更喜歡方法一。

方法三:建立斜坐標(biāo)系芯杀。

#include <iostream>
#include <math.h>

using namespace std;

#define eps 1e-6
#define zero(x) (((x)>0?(x):-(x))<eps)

int direct[6][2] = { { 0, 1 }, { -1, 1 }, { -1, 0 }, { 0, -1 }, { 1, -1 }, { 1, 0 } };//斜坐標(biāo)系的六個(gè)方向

int main()
{
    int x;
    while (cin >> x)
    {
        double n = (sqrt(12 * x - 3)*1.0 - 3) / 6;
        int p = zero(n - ceil(n)) ? (int) n : ceil(n);
        int t = x - 3 * p * p + 3 * p - 1;
        int xcord, ycord;
        //x equals the n loops plus t.
        //cout << (int) p << ' ' << t << endl;
        xcord = p - 1; ycord = 0;
        while (1)
        {
            if (t == 0) goto L1;//t==0就可以撤出來(lái)了~
            xcord += direct[0][0], ycord += direct[0][1];//先向direct[0]走一步
            t--;
            if (t == 0) goto L1;
            for (int i = 1; i <= p - 1; i++)
            {
                xcord += direct[1][0], ycord += direct[1][1];//再向direct[1]走p-1步
                t--;
                if (t == 0) goto L1;
            }
            for (int i = 2; i <= 6; i++)
            {
                for (int j = 1; j <= p; j++)
                {
                    xcord += direct[i % 6][0], ycord += direct[i % 6][1];//然后向其他剩余的五個(gè)方向各走p步
                    t--;
                    if (t == 0) goto L1;
                }
            }
        }
    L1: cout << xcord << ' ' << ycord << endl;
    }
}

dalao的代碼端考,希望后面有機(jī)會(huì)能夠用自己的語(yǔ)言改一下!挖坑X(jué)1揭厚;

湃刺兀客小白月賽1-G

簡(jiǎn)單dp(N=3樣例情況)

看圖就應(yīng)該明白題意了。
本題的難點(diǎn)在于建圖---輸入一共有4*N-3行筛圆,要建成蜂巢狀裂明。

方法一:非遞歸。

#include<map>
#include<math.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<algorithm>
using namespace std;
#define ll long long
#define maxn 100005
int n,dp[3205][2205],a[3205][2205];
int main(void)
{
    scanf("%d",&n);int m=2*n-1;
    memset(a, -62, sizeof(a));
    for(int i=1;i<=4*n-3;i++)
    {
        int tmp;
        if(i<=n) tmp=i;
        else if(i>=4*n-3-n+1) tmp=4*n-3-i+1;
        else tmp=n-((i-n)%2==1);
        for(int j=m/2+2-tmp;j<=m/2+2-tmp+2*(tmp-1);j+=2)
            scanf("%d",&a[i][j]);
    }
    memset(dp,-62,sizeof(dp));
    for(int i=1;i<=4*n-3;i++)
        for(int j=1;j<=m;j++)
        {
            if(i==1) dp[i][j]=a[i][j];
            else if(a[i][j]>=-60000)
                dp[i][j]=max(dp[i-1][j-1],max(dp[i-2][j],dp[i-1][j+1]))+a[i][j];
        }
    printf("%d\n",dp[4*n-3][n]);
    return 0;
}

這是非遞歸建圖的方法太援,其實(shí)很簡(jiǎn)單闽晦。

將此蜂巢分成三份,分別是 1...n粉寞,n-1和n交替出現(xiàn)尼荆,n...1。

方法二:遞歸唧垦。
此程序個(gè)人化非常嚴(yán)重,就不貼完全代碼了液样。

void dfs(int x,int y,int n,int t)
{
    if(!t) return ;
    fup(i,0,n-1)
        vis[x+2*i][y]=1;
    dfs(x+1,y-1,n-1,t-1);
}
void dfs1(int x,int y,int n,int t)
{
    if(!t) return ;
    fup(i,0,n-1)
        vis[x+2*i][y]=1;
    dfs1(x+1,y+1,n-1,t-1);
}
for(int i=1;i<=4*n-3;i++){
      for(int j=1;j<=2*n-1;j--)
            if(vis[i][j]) scanf("%d",&a[i][j]);
            q[i].push_back(j);
        }

注:這里遞歸建圖的時(shí)候是以列建圖的振亮。個(gè)人認(rèn)為第二段代碼不必用vector,與方法一采用類(lèi)似的寫(xiě)法即可鞭莽,在此再挖一坑坊秸。挖坑X(jué)2;

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末澎怒,一起剝皮案震驚了整個(gè)濱河市褒搔,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌喷面,老刑警劉巖星瘾,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異惧辈,居然都是意外死亡琳状,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)盒齿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)念逞,“玉大人困食,你說(shuō)我怎么就攤上這事◆岢校” “怎么了硕盹?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)叨咖。 經(jīng)常有香客問(wèn)我莱睁,道長(zhǎng),這世上最難降的妖魔是什么芒澜? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任仰剿,我火速辦了婚禮,結(jié)果婚禮上痴晦,老公的妹妹穿的比我還像新娘南吮。我一直安慰自己,他們只是感情好誊酌,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布部凑。 她就那樣靜靜地躺著,像睡著了一般碧浊。 火紅的嫁衣襯著肌膚如雪涂邀。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,036評(píng)論 1 285
  • 那天箱锐,我揣著相機(jī)與錄音比勉,去河邊找鬼。 笑死驹止,一個(gè)胖子當(dāng)著我的面吹牛浩聋,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播臊恋,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼衣洁,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了抖仅?” 一聲冷哼從身側(cè)響起坊夫,我...
    開(kāi)封第一講書(shū)人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎撤卢,沒(méi)想到半個(gè)月后环凿,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡凸丸,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年拷邢,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片屎慢。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡瞭稼,死狀恐怖忽洛,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情环肘,我是刑警寧澤欲虚,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站悔雹,受9級(jí)特大地震影響复哆,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜腌零,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一梯找、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧益涧,春花似錦锈锤、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至扭弧,卻和暖如春阎姥,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背鸽捻。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工呼巴, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人泊愧。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓伊磺,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親删咱。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,509評(píng)論 25 707
  • 過(guò)段時(shí)間豪筝,我也打算去九華山拜拜佛痰滋,燒燒香,許許愿续崖,為家里的孩子和老人敲街。冥冥之中我仿佛看到了那個(gè)慈眉善目的神佛被我的...
    玲瓏雪閱讀 506評(píng)論 0 1
  • 這幾年多艇,因?yàn)橐苿?dòng)互聯(lián)網(wǎng)的野蠻發(fā)展,一個(gè)嶄新的營(yíng)銷(xiāo)時(shí)代已經(jīng)來(lái)臨像吻。微信營(yíng)銷(xiāo)峻黍,是以分眾和精眾市場(chǎng)為目標(biāo)訴求的營(yíng)銷(xiāo)模式复隆,也...
    人傍凄涼立暮秋閱讀 338評(píng)論 0 0
  • 續(xù)集請(qǐng)看:有馬溫泉奇遇記(二) 去有馬泡溫泉那天正趕上金湯休息日,那天是個(gè)出奇的熱天姆涩,我實(shí)在懶得再走去太閣之湯挽拂,于...
    Susie910閱讀 786評(píng)論 0 1
  • 每每在進(jìn)入到產(chǎn)品的草圖階段時(shí),總會(huì)有很長(zhǎng)一段時(shí)間的迷茫骨饿,不知道該如何去推演草圖亏栈,不知道如何將自己的邏輯性思維融入到...
    Austin_Luk閱讀 309評(píng)論 0 0