作业:
#include <iostream>
using namespace std;
bool b[100][100]={0};
char map[100][100]={0};
int dx[4]={0,1,0,-1};
int dy[4]={1,0,-1,0};
int n,m;
int sx,sy,ex,ey;
int mink=2147483647;
void dfs(int,int,int);
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>map[i][j];
if(map[i][j]=='S'){
sx=i;sy=j;
}
if(map[i][j]=='T'){
ex=i;ey=j;
}
}
}
dfs(sx,sy,0);
cout<<mink<<endl;;
return 0;
}
void dfs(int x,int y,int k){
if(x==ex=ey){
mink=min(k,mink);
return;
}
for(int i=0;i<4;i++){
int nx=x+dx[i];
int ny=y+dy[i];
if(b[nx][ny]==0&&map[nx][ny]!=0&&map[nx][ny]!='#'){
b[nx][ny]=1;
dfs(nx,ny,k+1);
b[nx][ny]=0;
}
}
}
#include <iostream>
using namespace std;
bool used[20]={0};//0-9
int r[20];
int l,sl;//1-n,l num
void dfs(int,int,int,int);
int main(){
cin>>l>>sl;
dfs(l,0,sl,-1);
return 0;
}
void dfs(int n,int k,int sl,int last){
if(k>=sl){
for(int i=0;i<sl;i++){
cout<<r[i]+1<<' ';
}
cout<<endl;
return;
}
for(int i=last+1;i<n;i++){
if(used[i]==0){
r[k]=i;
used[i]=1;
dfs(n,k+1,sl,i);
used[i]=0;
}
}
}