基于堆栈实现的迷宫问题c语言编程
在绘制c#界面时,底部重绘每次都会清除画布背景,然后全部重绘,这是导致闪烁的主要原因。所以消息发送函数操作过载,消息被禁止。代码如下:
保护覆盖无效WndProc(参考消息m)
{
If (m.Msg == 0x0014) //禁用清除后台消息。
返回;
基地。WndProc(ref m);
}
详细说明:C语言迷宫题,用栈来做。 # include stdio . h # include mem . h void main(){ int a[100][100];//0:阻塞1:通道2:完成-1:已访问;int b[10000][2];int m=0,n = 0;int sttop = 0;int i,j,k,l;memset(a,0,sizeof(a));printf("请输入m,n:");scanf("%d%d ",m,n);printf("输入开始:");scanf("%d%d ",I,j);b[0][0]= I-1;b[0][1]= j-1;printf("输入地图:\ n ");for(I = 0;im;I)for(j = 0;jn;j ) { scanf("%d ",a[I][j]);} printf("输入终点:");scanf("%d%d ",I,j);a[I-1][j-1]= 2;I = b[sttop][0];j = b[sttop][1];a[I][j]=-1;while (sttop!=-1){ if(i0){//能起来吗?if(a[I-1][j]= = 1){ a[-I][j]=-1;b[sttop][0]= I;b[sttop][1]= j;继续;} else if(a[I-1][j]= = 2){ b[sttop][0]=-I;b[sttop][1]= j;打破;} } if(im-1){//能up?if(a[I 1][j]= = 1){ a[I][j]=-1;b[sttop][0]= I;b[sttop][1]= j;继续;} else if(a[I 1][j]= = 2){ b[ST top][0]= I;b[sttop][1]= j;打破;} } if(j0){//可左?if(a[I][j-1]= = 1){ a[I][-j]=-1;b[sttop][0]= I;b[sttop][1]= j;继续;} else if(a[I][j-1]= = 2){ b[sttop][0]= I;b[sttop][1]=-j;打破;} } if(JM-1){//能up?if(a[I][j 1]= = 1){ a[I][j]=-1;b[sttop][0]= I;b[sttop][1]= j;继续;} else if(a[I][j 1]= = 2){ b[ST top][0]= I;b[sttop][1]= j;打破;} } sttop-;} if(ST top 1){ for(I = 0;isttopi ) printf("(%d,%d)-",b[i][0] 1,b[I][1]1);printf("(%d,%d)\n ",b[i][0] 1,b[I][1]1);} else printf("不能到达终点!\ n ");返回;}对于非嵌套法制作的栈,起点和终点的数据输入规则如下:先输入m ^ n(m为行数,n为列数),再输入起点(左上角为(1,1)(前一行号,后一列号),再输入“1 ^ 1”(不带引号),以此类推), 然后输入地图(0为遮挡,1为路径)(无论输入0还是1都默认为起点),然后输入终点(规则与起点相同)回车得到结果。 结果的表达式是(x,y)-(x,y)(坐标为1,1为左上角)或者不能到达终点!如果您提出其他修改,您可以做任何您想做的事情(规模m,n=100,对于堆栈来说太大了)
迷宫问题c语言,数据结构教程 你好
地主
我很幸运能看到你的问题。
但是很遗憾,还没有人回答你的问题。也许你现在已经在别的地方找到了答案,那么恭喜你。
你这个问题我帮不了你!
可能你问的问题有点专业。或者别人没有遇到过或者接触过你的问题,所以帮不了你。建议你去相关论坛求助,那里一般人比较多,比较热情,可能会帮你快速解决问题。
希望我的回答也能帮到你!
祝你好运。
中国新年就要到了,
最后,祝您全家幸福,健康,快乐每一天!
用堆栈实现C语言中的迷宫问题 #包括
#定义MAXSIZE 100
使用命名空间std
结构堆栈{
int iway
int jway
int dire
};
栈迷宫[MAXSIZE];
int top
int map[14][28]={{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
{1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,1,1,1,1,1},
{1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,1,1,0,0,1},
{1,0,0,0,0,0,0,0,1,1,1,0,0,0,1,0,0,0,0,1,1,0,1,1,1,1,0,1},
{1,0,0,0,0,0,0,0,1,1,1,0,1,1,1,1,0,0,0,1,1,0,1,1,1,1,0,1},
{1,0,0,0,0,0,0,0,1,1,1,0,0,0,1,0,0,0,0,1,1,0,0,1,1,0,0,1},
{1,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,1,1,0,1,1,1,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}};
void findway(int xS,int yS,int xE,int yE)
{
top = 0;
迷宫[顶部]。iway = xS
迷宫[顶部]。jway = yS
map[xS][yS]=-1;
int i,j,di,find
while(前1名)
{
I =迷宫[顶]。iway
j =迷宫[顶部]。jway
di =迷宫[顶部]。可怕;
if(i==xEj==yE)
{
cout " * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \ n ";
cout " path " ":" endl;
cout "("迷宫[0]。iway”,“迷宫[0]。jway ")";
for(int val = 1;valtop 1;val)
{
cout("maze[val].iway”,“迷宫[瓦尔]。jway ")";
if((val 1)%5==0)
coutendl
}
coutendl
cout " * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \ n ";
返回;
}
find = 0;
while(find==0di4)
{
di;
开关(di)
{
案例(0):I =迷宫[上]。iway
j =迷宫[顶部]。j way 1;
打破;
情况(1):I =迷宫[上]。iway
j =迷宫[顶部]。j way-1;
打破;
情况(2):I =迷宫[上]。iway 1;
j =迷宫[顶部]。jway
打破;
情况(3):I =迷宫[上]。iway-1;
j =迷宫[顶部]。jway
打破;
}
if(map[i][j]==0)
{
find = 1;
}
}
if(find==1)
{
迷宫[顶部]。dire = di
顶;
迷宫[顶部]。iway = I;
迷宫[顶部]。jway = j
迷宫[顶部]。dire =-1;
map[I][j]=-1;
}
其他
{
地图[迷宫[顶部]。iway][迷宫[上]。j way]= 0;
top-;
}
}
}
int main()
{
for(int I = 0;i14I) //迷宫图形输出
{
for(int j = 0;j28j)
{
if(map[i][j]==1)
cout "■";
else cout“□”;
}
coutendl
}
int xStart,yStart,xEnd,yEnd
Cout "请输入迷宫起点的坐标,用空格隔开(左上角坐标为(0,0)):";
cinxStartyStart
Cout "请输入迷宫终点的坐标,用空格隔开(右上角坐标为(13,27)):";
cinxEndyEnd
findway(xStart,yStart,xEnd,yEnd);
返回0;
}
满意,请采纳!
最后更新于 2023-10-08 21:04:41 并被添加「」标签,已有 位童鞋阅读过。
本站使用「署名 4.0 国际」创作共享协议,可自由转载、引用,但需署名作者且注明文章出处
相关文章