dfs:
#include<iostream>
using namespace std;
string maze[110];
int n,m;
bool in(int x,int y){
return 0<=x&&x<n&&y>=0&&y<m;
}
bool vis[110][110];
int dir[4][2]={{1,0},{0,1},{-1,0},{0,-1}};
bool dfs(int x,int y){
if(maze[x][y]=='T'){
return true;
}
vis[x][y]=1;
maze[x][y]='m';
for(int i=0;i<4;i++){
int tx=x+dir[i][0];
int ty=y+dir[i][1];
if(!vis[tx][ty]&&maze[tx][ty]!='*'&&in(tx,ty)){
if(dfs(tx,ty)){
return true;
}
}
}
vis[x][y]=0;
maze[x][y]='.';
return false;
}
int main(){
cin>>n>>m;
for(int i=0;i<n;i++){
cin>>maze[i];
}
int x,y;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(maze[i][j]=='S'){
x=i;
y=j;
}
}
}
if(dfs(x,y)){
for(int i=0;i<n;i++){
cout<<maze[i]<<endl;
}
}else{
cout<<"no"<<endl;
}
return 0;
}
#include<iostream>
using namespace std;
char s[10][10];
int dir[8][2]={{2,1},{1,2},{-1,2},{-2,1},{-2,-1},{-1,-2},{1,-2},{2,-1}};
bool f;
bool vis[10][10];
int ans=1000000;//
bool in(int x,int y){
return 0<=x && x<10 && 0<=y && y<9;
}
void dfs(int x,int y,int step){
vis[x][y]=true;
if(s[x][y]=='T'){
f=true;//
if(step<ans){
ans=step;//
}
return;
}
for(int i=0;i<8;i++){
int tx=x+dir[i][0];
int ty=y+dir[i][1];
if(in(tx,ty)&&s[tx][ty]!='#'&&!vis[tx][ty]){
dfs(tx,ty,step+1);
}
}
}
int main(){
int x,y;
for(int i=0;i<10;i++){
for(int j=0;j<9;j++){
cin>>s[i][j];
}
}
for(int i=0;i<10;i++){
for(int j=0;j<9;j++){
if(s[i][j]=='S'){
x=i;
y=j;
break;
}
}
}
dfs(x,y,0);
if(f){
cout<<"Yes "<<ans<<endl;
}else{
cout<<"No"<<endl;
}
return 0;
}
#include<iostream>
using namespace std;
string maze[110];
int n,m;
bool f=false;
int min_1=10000000;
bool in(int x,int y){
return 0<=x&&x<n&&y>=0&&y<m;
}
bool vis[110][110];
int dir[4][2]={{1,0},{0,1},{-1,0},{0,-1}};
bool dfs(int x,int y,int step){
if(maze[x][y]=='T'){
if(min_1>step)
min_1=step;
f = true;
return true;
}
vis[x][y]=1;
maze[x][y]='m';
for(int i=0;i<4;i++){
int tx=x+dir[i][0];
int ty=y+dir[i][1];
if(!vis[tx][ty]&&maze[tx][ty]!='*'&&in(tx,ty)){
if(dfs(tx,ty,step+1)){
return true;
}
}
}
vis[x][y]=0;
maze[x][y]='.';
return false;
}
int main(){`在这里插入代码片`
cin>>n>>m;
for(int i=0;i<n;i++){
cin>>maze[i];
}
int x,y;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(maze[i][j]=='S'){
x=i;
y=j;
}
}
}
if(dfs(x,y,0)){
for(int i=0;i<n;i++){
cout<<maze[i]<<endl;
}
}else{
cout<<"no"<<endl;
}
if(f){
cout<<min_1<<endl;
}
return 0;
}
#include<iostream>
using namespace std;
int n,m;
char maze[110][110];
bool vis[110][110];
void dfs(int x,int y){
if(x<0||x>=n||y<0||y>=m||vis[x][y]||maze[x][y]=='.'){
return ;
}
vis[x][y]=true;
dfs(x-1,y);
dfs(x+1,y);
dfs(x,y-1);
dfs(x,y+1);
}
int main(){
int cnt=0;
cin>>n>>m;
for(int i=0;i<n;i++){
cin>>maze[i];
}
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(!vis[i][j]&&maze[i][j]=='#'){
cnt++;
dfs(i,j);
cout<<i<<" "<<j<<endl;
}
}
}
cout<<cnt<<endl;
return 0;
}