導航:首頁 > 源碼編譯 > c語言迷宮演算法入門

c語言迷宮演算法入門

發布時間:2024-10-26 20:11:32

⑴ C語言迷宮問題,求該演算法的時間和空間的復雜度。迷宮的路徑已經定義好,求出路的演算法。

該演算法是不穩定的,其時空復雜度不僅和m,n有關,還和mg[][]的具體數值有關。
最壞情況下:每個點都試探過才走到終點。此時時間復雜度為:(m*n-1)*4,(其中4為4個方向),空間復雜度m*n*2,(其中m*n為存儲迷宮圖空間,m*n為棧空間);
再好情況下:一次試探過就走到終點。此時時間復雜度為:(min(m,n)-1),空間復雜度m*n;

所以:
該演算法時間復雜度為:[(m*n-1)*4+(min(m,n)-1)]/2,約為2×m×n
空間復雜度為3*m*n/2

⑵ 如何用C語言實現求迷宮的最短路徑

#include<stdio.h>
#include<stdlib.h>
#define M 8
#define N 8
#define Max 100
int mg[M+2][N+2]= //定義迷宮,0表示能走的塊,1表示不能走,在外圍加上一圈不能走的塊
{
{1,1,1,1,1,1,1,1,1,1},
{1,0,0,1,0,0,0,1,0,1},
{1,0,0,1,0,0,0,1,0,1},
{1,0,0,0,0,1,1,0,0,1},
{1,0,1,1,1,0,0,0,0,1},
{1,0,0,0,1,0,0,0,0,1},
{1,0,1,0,0,0,1,0,0,1},
{1,0,1,1,1,0,1,1,0,1},
{1,1,0,0,0,0,0,0,0,1},
{1,1,1,1,1,1,1,1,1,1}
};
struct
{
int i,j; //塊的位置
int pre; //本路徑中上一塊在隊列中的下標
}Qu[Max];
int front=-1,rear=-1;
void print(int n);
int mgpath(int xi,int yi,int xe,int ye) //搜索演算法
{
int i,j,find=0,di;
rear++;
Qu[rear].i=xi;
Qu[rear].j=yi;
Qu[rear].pre=-1;
mg[1][1]=-1;
while(front<=rear&&!find)
{
front++;
i=Qu[front].i;
j=Qu[front].j;
if(i==xe&&j==ye)
{
find=1;
print(front);
return(1);
}
for(di=0;di<4;di++)
{
switch(di) //四個方向
{
case 0:i=Qu[front].i-1;j=Qu[front].j;break;
case 1:i=Qu[front].i;j=Qu[front].j+1;break;
case 2:i=Qu[front].i+1;j=Qu[front].j;break;
case 3:i=Qu[front].i;j=Qu[front].j-1;break;
}
if(mg[i][j]==0)
{
rear++;
Qu[rear].i=i;
Qu[rear].j=j;
Qu[rear].pre=front;
mg[i][j]=-1; //避免死循環
}
}
}
return 0;
}

void print(int n) //輸出 路徑演算法
{
int k=n,j,m=1;
printf("\n");
do //將輸出的路徑上的所有pre改為-1
{
j=k;
k=Qu[k].pre;
Qu[j].pre=-1;
}while(k!=0);
printf("迷宮最短路徑如下:\n");
k=0;
while(k<Max)
{
if(Qu[k].pre==-1)
{
printf("\t(%d,%d)",Qu[k].i,Qu[k].j);
if(m%5==0)
printf("\n");
m++;
}
k++;
}
printf("\n");
}
int main()
{
mgpath(1,1,M,N);
system("pause");
return 0;
}

⑶ c語言菜鳥——迷宮問題。說明——使用DEV-C++編譯器。望高手不吝賜教!感激。

typedef struct node
{
int i,j;//橫縱坐標
int di;//direction
}st[max];
結構體定義語法錯誤,typedef是將結構體重命名為另一個名字的,改為:
typedef struct
{
int i,j;//橫縱坐標
int di;//direction
}node;
node st[max];
或者:
struct node
{
int i,j;//橫縱坐標
int di;//direction
}st[max];

⑷ C語言簡單迷宮

for (i=0;i<24;i++)
{
for (j=0;j<25;j++)
printf("%c",a[i][j]);

你的二維數組只有7行8列,可你輸出了24行25列,非法訪問了內存

改成這樣看看

for (i=0;i<7;i++)
{
for (j=0;j<8;j++)
printf("%c",a[i][j]);

閱讀全文

與c語言迷宮演算法入門相關的資料

熱點內容
建築考二建刷視頻用什麼app 瀏覽:233
取消紙質文件夾密碼 瀏覽:769
程序員級別提升 瀏覽:432
編譯運行後停止工作 瀏覽:779
白虎通pdf 瀏覽:673
linux開啟關閉埠 瀏覽:228
單片機加一個晶元 瀏覽:723
vs編譯方式 瀏覽:211
安卓的掌盟盒子可以查什麼 瀏覽:864
上下學app有什麼好處 瀏覽:363
程序員做信貸項目的好跳槽嗎 瀏覽:252
粘土伺服器的禮盒為什麼開不了 瀏覽:506
樂高機器人pdf 瀏覽:863
退出scala命令 瀏覽:366
不管什麼情況下軍人必須服從命令 瀏覽:267
雲計算和伺服器模式有什麼區別 瀏覽:524
s型增長速率演算法 瀏覽:978
c語言迷宮演算法入門 瀏覽:242
android列表動畫 瀏覽:362
外企演算法面試 瀏覽:321