隨機走動問題是一大類問題的總稱,引得數學界興趣旺盛,且經久不衰。除了一些特例外,這個問題是出奇的難題,大部分迄今為止都不能解決。下面是隨機走動問題中的乙個:
乙隻貪杯的蟑螂,熏熏然在室內遊蕩。地面鋪滿方磚,共計n×m
塊,構成大面積矩陣。蟑螂在方磚間隨機爬行,可能撞大運,**阿司匹林解酒,這裡按下不表。假定蟑螂從房間**一塊方磚出發,除非撞牆,可以爬向相鄰
8塊方磚中的任意乙個,且機會相等。問蟑螂多久才能在所有方磚上留下足跡?
用計算機求解的方法稱為「**」,具有極廣泛的應用領域。下面看看蟑螂問題的**:
用n×m
的陣列count
記錄蟑螂爬過的每塊方磚的次數,陣列每個單元的初始值設為
0,蟑螂當前座標為
ibug
,jbug
表示,下乙個移動目標是(
ibug + imove[k], jbug + jmove[k]),0<= k<=7,且
imove[0] = -1 jmove[0] = -1
imove[1] = 0
jmove[1] = 0
imove[2] = 1
jmove[2] = 1
imove[3] = -1
jmove[3] = -1
imove[4] = 0 jmove[4] = 0
imove[5] = 1
jmove[5] = 1
imove[6] = -1 jmove[6] = -1
imove[7] = 0 jmove[7] = 0
蟑螂爬向的下乙個目標是相鄰的8
塊方磚之一,**時每次產生乙個0到
7的隨機數存放在變數
k中。因為蟑螂不會爬出房間,如果產生的隨機數對應的座標撞牆,則忽略不計,產生下乙個新隨機數繼續。蟑螂爬到任意方磚,他的計數值都要加
1,記錄蟑螂爬過的次數。程式執行直到蟑螂爬過所有的方磚至少一次。
程式設計完成以下練習。
my answer:
platform :
tc 2.0
#include
#include
#define rows 10
/*房間的大小*/
#define cols 10
int room[rows][cols];
int ibug, jbug; /*當前蟑螂的位置*/
void initial() /*初始化矩陣,即房間*/
for(i = 0; i < rows; i++)
for(j = 0; j < cols; j++)
}void print() /*列印方磚,蟑螂走過的足跡*/
putchar('/n');
} }
int judge()
} return 1; }
void choosestart()
/* 自己選擇蟑螂起始點*/
while(ibug <= 0 && ibug > rows -1 && jbug <= 0 && jbug > cols - 1);
} int main(void)
while(i == ibug && j == jbug);
newibug = ibug;
ne**ug = jbug;
i = ibug;
j = jbug;
room[newibug][ne**ug]++; /*爬到的位置加
1*/
clrscr();
print();
if(judge())
break;
} /*列印總共花費的時間*/
printf("running time is %.2lf/n", (double)(time(null) - start));
getch();
return 0; }
我設定的是10×10
面積,執行時間一般在
5秒左右。
理論上可以解決這個問題,但是當行列太大時,程式會執行的特別慢。
如果有興趣,可以把行列換成39×20
的,你就會知道什麼叫做程式跑不過烏龜了。呵呵。
mysql jdbc驅動問題
1 建立了乙個j2ee專案。2 將mysql的jdbc驅動拷貝到webcontent web inf lib 目錄下。3 在驅動jar包上點右鍵將jar包新增到構建路徑中。4 然後編寫與資料庫相關的 5 在實現類中新增main方法進行單元測試,各個方法都能正常執行。6 建立jsp頁面在其中建立物件呼...
oracle em 啟動問題
一 em 常用命令 emca repos create 建立乙個 em資料庫 emca repos recreate 重建乙個 em資料庫 emca repos drop 刪除乙個 em資料庫 emca config dbcontrol db 配置資料庫的 database control emca...
oracle啟動問題
正常情況下您的oracle服務是可以自己啟動的,如果您的oracle不知道因為什麼突然之間不可以啟動了,你可以考慮以下情況。1.你的電腦ip位址發生了改變,比如你的電腦ip位址是自動分配的,因為oracle的啟動繫結的是自己的ip位址,所以如果你的ip位址發生了變化,那麼你的資料庫肯定是無法啟動的。...