迷宫:
#include<bits/stdc++.h>
using namespace std;
char k[4]={'D','L','R','U'};
int dir[4][2]={{1,0},{0,-1},{0,1},{-1,0}};
int flag[30][50]={0};
char a[30][50];
struct node
{
int x;
int y;
string p;
};
void dfs()
{
node start;
start.x=0;
start.y=0;
start.p="";
flag[0][0]=1;
queue<node>q;
q.push(start);
while(!q.empty())
{
node now;
now=q.front();
q.pop();
if(now.x==29&&now.y==49)
{
cout<<now.p;
return;
}
for(int i=0;i<4;i++)
{
node next;
next.x=now.x+dir[i][0];
next.y=now.y+dir[i][1];
next.p=now.p+k[i];
if(next.x<0||next.x>=30||next.y<0||next.y>=50)
continue;
if(a[next.x][next.y]=='1'||flag[next.x][next.y]==1)
{
continue;
}
q.push(next);
flag[next.x][next.y]=1;
}
}
}
int main()
{
for(int i=0;i<30;i++)
{
for(int j=0;j<50;j++)
{
cin>>a[i][j];
}
}
dfs();
return 0;
}
迷宫2:
#include<bits/stdc++.h>
using namespace std;
char a[10][10];
int flag[10][10];
int sum=0;
void dfs(int m,int n)
{
if(m<0||m>=10||n<0||n>=10)
{
sum++;
return ;
}
else
{
if(flag[m][n]) return ;//先进行判断,然后再改变标志位
flag[m][n]=1;
if(a[m][n]=='L')
dfs(m,n-1);
if(a[m][n]=='R')
dfs(m,n+1);
if(a[m][n]=='U')
dfs(m-1,n);
if(a[m][n]=='D')
dfs(m+1,n);
}
}
int main()
{
for(int i=0;i<10;i++)
{
for(int j=0;j<10;j++)
{
cin>>a[i][j];
}
}
for(int i=0;i<10;i++)
{
for(int j=0;j<10;j++)
{
memset(flag,0,sizeof(flag));
dfs(i,j);
}
}
cout<<sum;
return 0;
}