/**************************************************************************************
* Function : test
* Create Date : 2014/07/11
* Author : NTSK13
* Email : beijiwei@qq.com
* Copyright : 欢迎大家和我一起交流学习,转载请保持源文件的完整性。
* 任何单位和个人不经本人允许不得用于商业用途
* Version : V0.1
***************************************************************************************
经典c程序(0032)
题目:较复杂迷宫求解 10*10 有多个分叉口,
可走通输出1,否则,输出0.
0为墙,1为通道
入口:
1 0 0 1 0 1 0 0 0 0
1 1 0 1 0 1 0 0 0 0
0 1 1 1 1 1 1 0 0 0
1 0 0 0 0 1 0 0 0 0
1 1 1 1 1 1 1 0 0 0
0 0 1 0 0 0 0 0 0 0
1 0 1 0 1 1 1 1 1 1
1 1 1 0 1 0 0 1 0 0
0 0 1 1 1 0 1 1 1 0
0 0 1 0 1 1 0 0 1 1 出口
**************************************************************************************/
#include<stdio.h>
#define M 10
typedef struct{
int x;
int y;
}Pos;
Pos start,end;
int data[M][M];
/***********************************************************/
int offset[4][2]={-1,0,0,1,1,0,0,-1};
int mark[M][M];
int check(Pos start,Pos end);
/***********************************************************/
int main(void)
{
int test_case;
int T=0,th=0;
/*
The freopen function below opens input.txt file in read only mode, and afterward,
the program will read from input.txt file instead of standard(keyboard) input.
To test your program, you may save input data in input.txt file,
and use freopen function to read from the file when using scanf function.
You may remove the comment symbols(//) in the below statement and use it.
But before submission, you must remove the freopen function or rewrite comment symbols(//).
*/
freopen("input.txt", "r", stdin);
/*
If you remove the statement below, your program's output may not be rocorded
when your program is terminated after the time limit.
For safety, please use setbuf(stdout, NULL); statement.
*/
setbuf(stdout, NULL);
scanf("%d", &T);
for(test_case = 0; test_case < T; test_case++)
{
int ret=0,i=0,j=0;
/**********************************
* Implement your algorithm here. */
scanf("%d", &th);
for(i=0;i<M;i++)
for(j=0;j<M;j++)
{
scanf("%d",&data[i][j]);
mark[i][j]=0;
}
start.x=0;
start.y=0;
end.x=9;
end.y=9;
ret=check(start,end);
/**********************************/
// Print the answer to standard output(screen).
printf("#%d %d\n",th,ret);
fflush(stdout);//修复Eclipse printf()不能显示的小bug
}
return (0);//Your program should return 0 on normal termination.
}
int check(Pos start,Pos end)
{
int x=0,y=0,tx=0,ty=0,k=0,ret=0;
x=start.x;
y=start.y;
if(x==end.x && y==end.y)
return 1;
mark[x][y]=1;
for(k=0;k<4;k++)
{
tx=x+offset[k][0];
ty=y+offset[k][1];
if( tx>=0 && tx<M &&
ty>=0 && ty<M &&
mark[tx][ty]==0
)
{
if(data[tx][ty]==1)
{
start.x=tx;
start.y=ty;
ret=check(start,end);
if(ret==1)
return ret;
}
}
}
return ret;
}
经典c程序(0032) ---迷宫可行性分析
最新推荐文章于 2021-12-17 10:55:10 发布
这是一个使用C语言编写的经典迷宫求解程序,通过递归方式检查从起点到终点的路径可行性。程序读取10x10的迷宫地图,输出1表示有可行路径,0表示无路可走。
摘要由CSDN通过智能技术生成