您的位置:首页 > 其它

算法分析——走迷宫问题

2011-08-19 20:31 465 查看
#include <stdio.h>

int visit(int i , int j);

int maze[7][7] = {
{2,2,2,2,2,2,2},
{2,0,0,0,0,0,2},
{2,0,2,0,2,0,2},
{2,0,0,2,0,2,2},
{2,2,0,2,0,2,2},
{2,0,0,0,0,0,2},
{2,2,2,2,2,2,2},
};
int si = 1 , sj = 1 ;
int ei = 5 , ej = 5 ;
int success = 0 ;

int main()
{

int i , j ;

printf("Display the maze :\n");
for(i = 0 ; i < 7 ; i++)
{
for(j = 0 ; j < 7 ; j++)
{
if(maze[i][j] == 2)
{
printf("■");
}
else
{
printf("  ");
}
}
printf("\n");
}

if(visit(si , sj) == 0)
{
printf("\nNot found exit !");
}
else
{
printf("Display the maze :\n");
for(i = 0 ; i < 7 ; i++)
{
for(j = 0 ; j < 7 ; j++)
{
if(maze[i][j] == 2)
{
printf("■");
}
else if(maze[i][j] == 1)
{
printf("◇");
}
else
{
printf("  ");
}
}
printf("\n");
}
}
   return 0 ;
}

int visit(int i , int j)
{
maze[i][j] = 1 ;

if(i == ei && j == ej)
success = 1 ;

if(success != 1 && maze[i][j + 1] == 0)
visit(i , j + 1);
if(success != 1 && maze[i + 1][j] == 0)
visit(i + 1 , j);
if(success != 1 && maze[i - 1][j] == 0)
visit(i - 1 , j);
if(success != 1 && maze[i][j - 1] == 0)
visit(i , j - 1);

if(success != 1)
maze[i][j] == 0 ;

return success ;
}




显示所有路径:

#include <stdio.h>

int visit(int i , int j);

int maze[9][9] = {
{2, 2, 2, 2, 2, 2, 2, 2, 2},
{2, 0, 0, 0, 0, 0, 0, 0, 2},
{2, 0, 2, 2, 0, 2, 2, 0, 2},
{2, 0, 2, 0, 0, 2, 0, 0, 2},
{2, 0, 2, 0, 2, 0, 2, 0, 2},
{2, 0, 0, 0, 0, 0, 2, 0, 2},
{2, 2, 0, 2, 2, 0, 2, 2, 2},
{2, 0, 0, 0, 0, 0, 0, 0, 2},
{2, 2, 2, 2, 2, 2, 2, 2, 2},
};

int si = 1 , sj = 1 ;
int ei = 7 , ej = 7 ;
int success = 0 ;

int main()
{

int i , j ;

printf("Display the maze :\n");
for(i = 0 ; i < 9 ; i++)
{
for(j = 0 ; j < 9 ; j++)
{
if(maze[i][j] == 2)
{
printf("█");
}
else
{
printf("  ");
}
}
printf("\n");
}

visit(si , sj) ;

return 0 ;
}

int visit(int i , int j)
{
int m , n ;
maze[i][j] = 1 ;

if(i == ei && j == ej)
{
printf("Display the maze :\n");
for(m = 0 ; m < 9 ; m++)
{
for(n = 0 ; n < 9 ; n++)
{
if(maze[m]
== 2)
{
printf("█");
}
else if(maze[m]
== 1)
{
printf("◇");
}
else
{
printf("  ");
}
}
printf("\n");
}
success = 1 ;
}

if(maze[i][j + 1] == 0)
visit(i , j + 1);
if(maze[i + 1][j] == 0)
visit(i + 1 , j);
if(maze[i - 1][j] == 0)
visit(i - 1 , j);
if(maze[i][j - 1] == 0)
visit(i , j - 1);

maze[i][j] = 0 ;

return success ;
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: