输入一个m行n列的字符矩阵,其中的元素均由‘.’和‘#’构成,表示一个迷宫。其中‘.’表示通路,可以通过,‘#’表示墙,不可以通过。走迷宫的过程中只能往上、下、左、右四个方向走,且不能走出迷宫边界。再给出一个入口和一个出口。请设计程序,计算输出从入口到出口的所有路径。如果不存在路径,则输出“none”。
输入
第一行为字符矩阵的行m与列n,数字之间用一个空格分隔。从第二行开始的m行为字符矩阵各元素的值(值与值之间无空格),再接下来的两行分别为入口和出口的坐标值(数字之间用一个空格分隔)。
输出
多行,为通路中路过的各点的坐标值。每个坐标用一对英文小括号括起来,括号内两个坐标值之间用英文逗号分隔,括号与括号之间用一个空格分隔。如果不存在通路,则输出“none”。
样例输入
45
.#...
.#.#.
.....
31
样例输出
(3,1)(3,2)(3,3)(2,3)(1,3)(1,4)(1,5)(2,5)(3,5)(4,5)
(3,1)(3,2)(3,3)(3,4)(3,5)(4,5)
【答案】
#include
#include
usingnamespacestd;
chara[100][100];
stringstr;
intstep=0,pathx[100],pathy[100],dx[5]={0,-1,0,1,0},dy[5]={0,0,1,0,-1},n,m,x1,y1,x2,y2,s=0;
voidmove(intx,inty){
step++;
pathx[step]=x;
pathy[step]=y;
if(x==x2&&y==y2){
s++;
for(inti=1;i<=step;i++){
}
cout< for(inti=1;i<=4;i++){ intxx=x+dx[i]; intyy=y+dy[i]; move(xx,yy); step--; intmain(void){ cin>>n>>m; for(inti=1;i<=n;i++){ cin>>str; for(intj=1;j<=str.size();j++){ a[i][j]=str[j-1]; cin>>x1>>y1>>x2>>y2; move(x1,y1); if(s==0){ 【迷宫3】 【题目】 设有一个N*N(2<=N<10)方格的迷宫,入口和出口分别在左上角和右上角。迷宫格子中分别放0和1,0表示可通,1表示不能通过,入口和出口肯定是0。迷宫走的规则如下:即从某个点开始,有八个方向可走,前进方格中的数字为0时表示可以通过,为1时表示不可通过,要另找路径。找出所有从入口(左上角)到出口(右上角)的路径(不能重复),输出路径总数,如果无法到达,则输出0。 第一行输入N.接下来N行,每行N个数字,0或1,描述迷宫。 输出路径总数。 3000011100 2 intstep=0,pathx[100],pathy[100],dx[9]={0,-1,0,1,0,-1,-1,1,1},dy[9]={0,0,1,0,-1,-1,1,-1,1},n,a[100][100],x1,y1,x2,y2,s=0; if(x==1&&y==n){ a[x][y]=1; for(inti=1;i<=8;i++){ if(xx>=1&&xx<=n&&yy>=1&&yy<=n&&a[xx][yy]==0){ a[xx][yy]=0; cin>>n; for(inti=1;i<=n;i++)for(intj=1;j<=n;j++)cin>>a[i][j]; move(1,1); cout< 【迷宫4】 给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过。给定起点坐标和终点坐标,问每个方格最多经过1次,在迷宫中移动有上下左右四种方式。保证起点上没有障碍。问:有多少种从起点坐标到终点坐标的方案? 第一行N、M和T,N为行,M为列,T为障碍总数。第二行起点坐标SX,SY,终点坐标FX,FY。接下来T行,每行为障碍的坐标。对于50%的数据,1<=N,M<=3;对于100%的数据,1<=N,M<=5。 给定起点坐标和终点坐标,问每个方格最多经过1次,从起点坐标到终点坐标的方案总数。 221112212 1 intstep=0,pathx[100],pathy[100],dx[9]={0,-1,0,1,0},dy[9]={0,0,1,0,-1},n,a[100][100],x1,y1,x2,y2,s=0,t,m,b[100][3]; voidinteresting(){ for(intj=1;j<=m;j++){ a[i][j]=0; for(inti=1;i<=t;i++){ a[b[i][1]][b[i][2]]=1; cin>>n>>m>>t>>x1>>y1>>x2>>y2; for(intj=1;j<=2;j++){ cin>>b[i][j]; interesting(); 【迷宫5】 一个迷宫由R行C列格子组成,有的格子里有障碍物,不能走;有的格子是空地,可以走。给定一个迷宫,求从左上角走到右下角最少需要走多少步(数据保证一定能走到)。只能在水平方向或垂直方向走,不能斜着走。 输出从左上角走到右下角至少要经过多少步(即至少要经过多少个空地格子)。计算步数要包括起点和终点。 55..####....#.#.##.#.##.#.. 9 intstep=0,pathx[100],pathy[100],dx[5]={0,-1,0,1,0},dy[5]={0,0,1,0,-1},n,m,x1,y1,x2,y2,s=0,p;