“人狼羊草”的電腦類比暴力枚舉

來源:互聯網
上載者:User

問題:人載狼羊草過河,一次擺渡除了人只能載一樣,沒人時,狼與羊、羊與草均不可獨處。問如何過河。

#define STATE char<br />#define PATH char<br />STATE State[8] = { 1 };<br />PATH Path[16];<br />char* Bios[] = { "草", "羊", "狼", "人" };<br />void Ferry ( int state, int dir, int p )<br />{<br /> int i, bio, j;<br /> if ( !dir && ( state & 6 ) != 6 && ( state & 3 ) != 3 )<br /> {<br /> Path[p] = 3;<br /> Ferry ( ~state & 7, 1, p + 1 );<br /> }<br /> for ( i = 0; i < 3; i++ )<br /> {<br /> if ( bio = state & ( 1 << i ) )<br /> {<br /> state &= ~bio;<br /> if ( State[ dir ? ~state & 7 : state ] ||<br /> ( state & 6 ) == 6 || ( state & 3 ) == 3 )<br /> state |= bio;<br /> else if ( dir && !state )<br /> {<br /> Path[p] = i;<br /> printf ( "擺渡過程,共往返 %d 次:/n", p + 1 );<br /> for ( j = 0; j <= p; j++ )<br /> printf ("%s:%s/n", (j & 1 ? "右往左" : "左往右"), Bios[Path[j]]);<br /> printf ( "/n" );<br /> break;<br /> }<br /> else<br /> {<br /> State[ dir ? ~state & 7 : state ] = 1;<br /> Path[p] = i;<br /> Ferry ( ~state & 7, !dir, p + 1 );<br /> State[ dir ? ~state & 7 : state ] = 0;<br /> state |= bio;<br /> }<br /> }<br /> }<br />}

調用方式:

Ferry ( 7, 1, 0 );

參考:

《四人過橋——微軟面試題的電腦類比》

《生日悖論的泛化問題的討論》

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.