[help]程式除錯大隊招募中(XD)
爛愷
幫我找找看哪裡出了問題吧
如果其他人也要幫忙的話
我說一下這在幹嘛吧
我要模擬一個m*m的陣列
這之中只有(a,b)是1
其他都是0
當開始操作時
以亂數決定要向周圍8個其中一個擴散
且原本的1會保留
當擴散到全部都變成1時停止
目前先做到這樣
那些printf都是檢測用的(除了前兩個)
P.S. 我之所以用+2 是因為避免本來是0我擴散過去之後
掃到他時又多做了 所以用模2確認原本是不是1
在後面有一個迴圈有將不是0的都回歸為1
現在的問題在於
以3*3為例 若初始位置在中央(2,2)
0 0 0
0 1 0
0 0 0
如果亂數模8之後r為0則會變成
1 0 0 0 7 6
0 1 0 亂數r對應位置→ 1 x 5
0 0 0 2 3 4
但我發現當r=1,2,5,6時會發生錯誤
如果r=1或6 會變成
0 0 1
1 1 0
0 0 0
如果r=2或5 會變成ˊ
0 0 0
0 1 1
1 0 0
就是找不到錯在哪........
下面的變數t,p,data[][]先別理他 我之後會用到
=========================分隔線================================
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(){
int m,a,b,i,j,x,y,r,t,p=1;
srand(time(NULL));
printf("m=");
scanf("%d",&m);
m-=1;
char k[m][m],data[(m+1)*(m+1)];
printf("a,b=");
scanf("%d,%d",&a,&b);
a-=1;b-=1;
for(i=0;i<=m;i++){
for(j=0;j<=m;j++){k[j]=0; }}
k[a]=1;
for(t=0;p<(m+1)*(m+1);t++){
data[t]=p;
for(i=0;i<=m;i++){
for(j=0;j<=m;j++){
if(k[j]%2==1){
r=rand()%8;
if(r==0){
if(i-1>=0&&j-1>=0)k[i-1][j-1]+=2;
}
if(r==1){/*x*/
if(j-1>=0)k[j-1]+=2;
printf("%d\n",k[j-1]);}
if(r==2){/*x*/
if(i+1<=m&&j-1>=0)k[i+1][j-1]+=2;
printf("%d\n",k[i+1][j-1]);}
if(r==3){
if(i+1<=m)k[i+1][j]+=2;
}
if(r==4){
if(i+1<=m&&j+1<=m)k[i+1][j+1]+=2;
}
if(r==5){/*x*/
if(j+1<=m)k[j+1]+=2;
printf("%d\n",k[j+1]);}
if(r==6){/*x*/
if(i-1>=0&&j+1<=m)k[i-1][j+1]+=2;
printf("%d\n",k[i-1][j+1]);}
if(r==7){
if(i-1>=0)k[i-1][j]+=2;
} printf("%d %d %d\n",r,i,j);
} printf("\n");
}
}
for(x=0,p=0;x<=m;x++){
for(y=0;y<=m;y++){
if(k[x][y]!=0){k[x][y]=1;p++;}
}}
for(i=0;i<=m;i++){
for(j=0;j<=m;j++){
printf("%d ",k[j]);}
printf("\n");}printf("\n");
}
data[t]=x;
system("PAUSE");
return 0;
}
=========================分隔線================================
[ 本帖最後由 len8301061 於 2010-10-20 21:47 編輯 ]
|