当前位置:首页 » 课程大全 » 数据结构课程设计迷宫问题

数据结构课程设计迷宫问题

发布时间: 2021-02-23 10:35:25

⑴ 高分求数据结构迷宫问题

#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#define N 20
int aa[N][N];
int yes=0;
int x[100][2],n=0;
void fun1(int (*aa)[N],int (*a)[N]);
int fun(int (*a)[N],int i,int j);
void begain(int (*t)[N]);
void pr(int (*t)[N],int nn);
void win(int (*t)[N]);
void lose();
void main(void)
{
int t[N][N];
begain(t);
pr(t,0);
fun(t,1,1);
if(yes)
win(t);
else
lose();
getch();
}
void fun1(int (*aa)[N],int (*a)[N])
{
int i,j;
for(i=0;i<N;i++)
for(j=0;j<N;j++)
aa[i][j]=a[i][j];
}
int fun(int (*a)[N],int i,int j)
{
if(i==N-2&&j==N-2)
{
yes=1;
return;
}
a[i][j]=1;
fun1(aa,a);
if(aa[i+1][j+1]==0&&!)
{
fun(aa,i+1,j+1);
if(yes)
{x[n][0]=i,x[n++][1]=j;return;}
}

fun1(aa,a);
if(aa[i+1][j]==0&&!yes)
{
fun(aa,i+1,j);
if(yes)
{x[n][0]=i,x[n++][1]=j;return;}
}
fun1(aa,a);
if(aa[i][j+1]==0&&!yes)
{
fun(aa,i,j+1);
if(yes)
{x[n][0]=i,x[n++][1]=j;return;}
}
fun1(aa,a);
if(aa[i-1][j]==0&&!yes)
{
fun(aa,i-1,j);
if(yes)
{x[n][0]=i,x[n++][1]=j;return;}
}
fun1(aa,a);
if(aa[i-1][j+1]==0&&!yes)
{
fun(aa,i-1,j+1);
if(yes)
{x[n][0]=i,x[n++][1]=j;return;}
}
fun1(aa,a);
if(aa[i+1][j-1]==0&&!yes)
{
fun(aa,i+1,j-1);
if(yes)
{x[n][0]=i,x[n++][1]=j;return;}
}
fun1(aa,a);
if(aa[i][j-1]==0&&!yes)
{
fun(aa,i,j-1);
if(yes)
{x[n][0]=i,x[n++][1]=j;return;}
}
fun1(aa,a);
if(aa[i-1][j-1]==0&&!yes)
{
fun(aa,i-1,j-1);
if(yes)
{x[n][0]=i,x[n++][1]=j;return;}
}
}
void begain(int (*t)[N])
{
int i,j;
system(cls);
randomize();
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
if(i==0||i==N-1||j==0||j==N-1)
t[i][j]=1;
else if(i==1&&j==1||i==N-2&&j==N-2)
t[i][j]=0;
else
t[i][j]=random(2);
}
}
}
void pr(int (*t)[N],int nn)
{
int i,j,ii;
textcolor(RED);
gotoxy(1,1);
for(i=0;i<N;i

⑵ 数据结构迷宫问题求解。

思路是链表存储已走过的路径(二级链表、struct、string等),存储3个值表示除上一位置之外的三个回方向是否测试过,指针答a指向链表上当前位置,然后测试除上一位置之外的三个方向,并记录。用do loop依次判断,如果三个方向都不通 就将a退后一格然后读取已检索位置,并测试第一个未检索位置。循环至终点或a退回起点并且没有未检索位置

⑶ 数据结构课程设计走迷宫怎么遍历所有路径

深度优先与广度优先

⑷ 数据结构 迷宫问题算法

//迷宫求解(自定义一个2维矩阵作为地图)
void Labyrinth()
{
printf("自定义迷宫矩阵:\n");
int a[10][10];
int i,j;
for(i=0;i<10;i++)
for(j=0;j<10;j++)
scanf("%d",&a[i][j]);
printf("\n");

coordinate *Laby = new coordinate[100];
int n=1;
int x,y;
Laby[1].x=x=1;
Laby[1].y=y=6;
Laby[1].step=1;
a[1][6]=2;
SqStack S;
InitStack(S);
Push(S,0);
Push(S,1);
i=1;
while(GetTop(S))
{
if(a[x][y]==100)
{
printf("找到终点了!!!\n");
break;
}
i++;
if(n==1)
a[x][y]=i;
if(a[x][y-1]==1||a[x-1][y]==100)
{
Push(S,i);
Laby[i].x=x;
Laby[i].y=y=y-1;
Laby[i].step=i;
n=1;
continue;

}
else if(a[x-1][y]==1||a[x-1][y]==100)
{
Push(S,i);
Laby[i].x=x=x-1;
Laby[i].y=y;
Laby[i].step=i;
n=1;
continue;
}
else if(a[x][y+1]==1||a[x][y+1]==100)
{
Push(S,i);
Laby[i].x=x;
Laby[i].y=y=y+1;
Laby[i].step=i;
n=1;
continue;
}
else if(a[x+1][y]==1||a[x+1][y]==100)
{
Push(S,i);
Laby[i].x=x=x+1;
Laby[i].y=y;
Laby[i].step=i;
n=1;
continue;
}
else
{
Pop(S,i);
x=Laby[i].x;
y=Laby[i].y;
a[x][y]=-1;
n=0;
}
}
if(!GetTop(S))
printf("没有找到出路!\n");

for(i=0;i<10;i++)
{
for(j=0;j<10;j++)
printf("%d ",a[i][j]);
printf("\n");
}
}

我没有给出栈的代码,你自己应该有吧!
具体迷宫算法 就是如此 仅供参考

⑸ 数据结构课程设计的迷宫问题~~~~急!!!

看下我的程序,,要不是你要的.

#include <iostream>
#include <iomanip>
using namespace std;
#define M 20
#define N 20
struct move{int dx,dy;};
move mazemove[8];
char ma[M][N];
int False=0;

void maze()
{int i,j,num;
for(i=1;i<M-1;i++)
{for(j=1;j<N-1;j++)
{num=(800*(i+j)+1500)%327;
if((num<156)&&(i!=M||j!=N))
ma[i][j]='1';
else
ma[i][j]='0';
}
}
ma[1][1]='0';
ma[M-2][N-2]='0';
for(i=0;i<M;i++)
{for(j=0;j<N;j++)
cout<<setw(3)<<ma[i][j];
cout<<endl;
}
}

void inimove()
{mazemove[0].dx=0;mazemove[0].dy=1;
mazemove[1].dx=1;mazemove[1].dy=1;
mazemove[2].dx=1;mazemove[2].dy=0;
mazemove[3].dx=1;mazemove[3].dy=-1;
mazemove[4].dx=0;mazemove[4].dy=-1;
mazemove[5].dx=-1;mazemove[5].dy=-1;
mazemove[6].dx=-1;mazemove[6].dy=0;
mazemove[7].dx=-1;mazemove[7].dy=1;
}

void outpath()
{int i,j,x,y,k;
i=1;j=1;k=0;
while((i!=(M-2))||(j!=(N-2)))
{for(k=0;k<8;k++)
{x=i+mazemove[k].dx;
y=j+mazemove[k].dy;
if(ma[x][y]=='0'){k=0;break;}
}
if(k!=8)
{if(ma[i][j]=='8')ma[i][j]='2';
if(ma[i][j]=='0')ma[i][j]='>';
i=x;j=y;
}
else
{for(k=0;k<8;k++)
{x=i+mazemove[k].dx;
y=j+mazemove[k].dy;
if(ma[x][y]=='8')break;
}
ma[i][j]='2';
i=x;j=y;
}
if((i==1)&&(j==1))
{False=0;
break;
}
else False=1;
}

}

int main()
{int i,j;
maze();
inimove();
outpath();
cout<<endl;
if(False==0)
cout<<"无法走出该迷宫!"<<endl;
else
{cout<<"走出迷宫的路径(用‘>’符号表示)为:"<<endl;
ma[M-2][N-2]='>';
for(i=0;i<M;i++)
{for(j=0;j<N;j++)
{ {if(ma[i][j]=='2')ma[i][j]='>';
if(ma[i][j]=='0')ma[i][j]=' ';
if(ma[i][j]=='1')ma[i][j]='*';
}
cout<<setw(3)<<ma[i][j];
}
cout<<endl;
}
}
return 0;
}

⑹ 数据结构C语言版迷宫问题

刚学都这样,想当初我学习的时候连一个单链表的逆置,都要理解半天。编程就是把实际问题给抽象成数学或非数学模型,结合数据的表示,再找到解决的方法。别忘了,学习数据结构是为了更好的操作数据。
思路:
首先,迷宫如何用计算机语言表示?一般用二维数组。0表示墙,1表示路。
其次,其次就是如何从迷宫中走出来了。结合堆栈,进行搜索。
你可以尝试着对问题进行分层,然后逐步细化来解决。

如果你要解决一个别人给的走迷宫的问题,同样还是要这样,首先把别人给的迷宫在计算机中表示出来,其次结合数据结构所学的知识,找到通路,(关于结合数据结构的知识就看你自己的了,关键是对堆栈的了解)。

关于你说的,先看别人的程序,找到思路后自己才能编程问题。我看你是操之过急了,你得明白,知识的学习,首先就是会模仿,等你对整个课程有了系统的认识,你才会有自己的解题思路。创新是在有基础的前提下进行的。别人的东西,试着理解,毕竟许多东西单凭我们自己是不太可能想出来的,就像kmp算法一样(你应该马上就会学到)。
第一章说过,研究数据间的关系的目的是为了更好的操作数据,迷宫问题,可以说是一类“搜索”问题,更强调的是算法,即在精通堆栈的基础上想出一个利用堆栈对迷宫进行搜索的办法。而堆栈,则是基础,堆栈的操作就那么几个,学完马上就会用。关键是如何运用三种程序设计方法再结合某些数据结构设计出一个算法。一步一步来吧。
对了,给你一个问题考虑考虑,“不用任何辅助变量”编写一个程序,逆置一个字符串试试。只给你一个参数:该参数就是指向字符串的指针。

你的最后问题问的就有点没头绪了,学习的过程并不是你想的那样的,不见得数据结构学完之后就能编写高质量程序,写程序和看程序是相辅相成的,写而不学则怠,学而不写则罔。可以尝试的写写,自己找不到思路可以看看别人是怎么想的,自己多做做总结。

⑺ 数据结构程序设计(迷宫问题) - 百度文库

看不到代码啊

⑻ 数据结构的编程问题:迷宫问题.

直接
#include <stdio.h>

#define Limit_Size 500

int map[ Limit_Size ][ Limit_Size ];
int n, m;
int visit[ Limit_Size ][ Limit_Size ];
int success = 0, count;

struct road
{
int x, y;
};

road stack[ Limit_Size * Limit_Size ];

void init( )
{
int i, j;
char t[ Limit_Size ];
printf("Please input m and n:\n");
scanf("%d%d", &m, &n);
printf("Please input the map:\n");
for ( i = 1; i <= m; i++ )
{
scanf("%s", t);
for ( j = 1; j <= n; j++ )
{
visit[ i ][ j ] = 1;
map[ i ][ j ] = t[ j - 1 ] - '0';
}
}
for ( i = 0; i <= n + 1; i++ )
map[ 0 ][ i ] = map[ m + 1 ][ i ] = 1;
for ( i = 0; i <= m + 1; i++ )
map[ i ][ 0 ] = map[ i ][ n + 1 ] = 1;
visit[ 1 ][ 1 ] = 0;
}

void dfs( int x, int y, int step )
{
if ( success )
return ;
stack[ step ].x = x;
stack[ step ].y = y;
if ( x == n && y == n )
{
count = step;
success = 1;
return ;
}
if ( !map[ x - 1 ][ y ] && visit[ x - 1 ][ y ] )
{
visit[ x - 1 ][ y ] = 0;
dfs( x - 1, y, step + 1 );
visit[ x - 1 ][ y ] = 1;
}
if ( !map[ x + 1 ][ y ] && visit[ x + 1 ][ y ] )
{
visit[ x + 1 ][ y ] = 0;
dfs( x + 1, y, step + 1 );
visit[ x + 1 ][ y ] = 1;
}
if ( !map[ x ][ y - 1 ] && visit[ x ][ y - 1 ] )
{
visit[ x ][ y - 1 ] = 0;
dfs( x, y - 1, step + 1 );
visit[ x ][ y - 1 ] = 1;
}
if ( !map[ x ][ y + 1 ] && visit[ x ][ y + 1 ] )
{
visit[ x ][ y + 1 ] = 0;
dfs( x, y + 1, step + 1 );
visit[ x ][ y + 1 ] = 1;
}
}

void print( )
{
int i;
printf("(%d, %d)", stack[ 0 ].x, stack[ 0 ].y);
for ( i = 1; i <= count; i++ )
printf("->(%d, %d)", stack[ i ].x, stack[ i ].y);
printf("\n");
}

int main( )
{
init( );
dfs( 1, 1, 0 );
print( );
return 0;
}

⑼ 数据结构迷宫问题

自己慢慢看吧,,

#include <iostream>
#include <iomanip>
using namespace std;
#define M 20
#define N 20
struct move{int dx,dy;};
move mazemove[8];
char ma[M][N];
int False=0;

void maze()
{int i,j,num;
for(i=1;i<M-1;i++)
{for(j=1;j<N-1;j++)
{num=(800*(i+j)+1500)%327;
if((num<156)&&(i!=M||j!=N))
ma[i][j]='1';
else
ma[i][j]='0';
}
}
ma[1][1]='0';
ma[M-2][N-2]='0';
for(i=0;i<M;i++)
{for(j=0;j<N;j++)
cout<<setw(3)<<ma[i][j];
cout<<endl;
}
}

void inimove()
{mazemove[0].dx=0;mazemove[0].dy=1;
mazemove[1].dx=1;mazemove[1].dy=1;
mazemove[2].dx=1;mazemove[2].dy=0;
mazemove[3].dx=1;mazemove[3].dy=-1;
mazemove[4].dx=0;mazemove[4].dy=-1;
mazemove[5].dx=-1;mazemove[5].dy=-1;
mazemove[6].dx=-1;mazemove[6].dy=0;
mazemove[7].dx=-1;mazemove[7].dy=1;
}

void outpath()
{int i,j,x,y,k;
i=1;j=1;k=0;
while((i!=(M-2))||(j!=(N-2)))
{for(k=0;k<8;k++)
{x=i+mazemove[k].dx;
y=j+mazemove[k].dy;
if(ma[x][y]=='0'){k=0;break;}
}
if(k!=8)
{if(ma[i][j]=='8')ma[i][j]='2';
if(ma[i][j]=='0')ma[i][j]='>';
i=x;j=y;
}
else
{for(k=0;k<8;k++)
{x=i+mazemove[k].dx;
y=j+mazemove[k].dy;
if(ma[x][y]=='8')break;
}
ma[i][j]='2';
i=x;j=y;
}
if((i==1)&&(j==1))
{False=0;
break;
}
else False=1;
}

}

int main()
{int i,j;
maze();
inimove();
outpath();
cout<<endl;
if(False==0)
cout<<"无法走出该迷宫!"<<endl;
else
{cout<<"走出迷宫的路径(用‘>’符号表示)为:"<<endl;
ma[M-2][N-2]='>';
for(i=0;i<M;i++)
{for(j=0;j<N;j++)
{ {if(ma[i][j]=='2')ma[i][j]='>';
if(ma[i][j]=='0')ma[i][j]=' ';
if(ma[i][j]=='1')ma[i][j]='*';
}
cout<<setw(3)<<ma[i][j];
}
cout<<endl;
}
}
return 0;
}

热点内容
武汉大学学生会辅导员寄语 发布:2021-03-16 21:44:16 浏览:612
七年级学生作文辅导学案 发布:2021-03-16 21:42:09 浏览:1
不屑弟高考成绩 发布:2021-03-16 21:40:59 浏览:754
大学毕业证会有成绩单 发布:2021-03-16 21:40:07 浏览:756
2017信阳学院辅导员招聘名单 发布:2021-03-16 21:40:02 浏览:800
查询重庆2018中考成绩查询 发布:2021-03-16 21:39:58 浏览:21
结业考试成绩怎么查询 发布:2021-03-16 21:28:40 浏览:679
14中医医师资格笔试考试成绩查分 发布:2021-03-16 21:28:39 浏览:655
名著赏析课程标准 发布:2021-03-16 21:27:57 浏览:881
北京大学商业领袖高端培训课程 发布:2021-03-16 21:27:41 浏览:919