#include <bits/stdc++.h>
using namespace std;
#define pii pair<int,int>constint N=200+10;constint M=10;constint inf=0x3f3f3f3f;
char s[N][N];int sx[M],sy[M];int n,m,dis[M][N][N];int dx[M]={0,0,1,-1};int dy[M]={1,-1,0,0};
void bfs(int id){
queue<pii>q;
q.push(make_pair(sx[id],sy[id]));
dis[id][sx[id]][sy[id]]=0;
while (!q.empty()){int x=q.front().first,y=q.front().second;
q.pop();for(int i =0; i <4; i++){int xx=x+dx[i],yy=y+dy[i];if(1<=xx&&xx<=n&&1<=yy&&yy<=m&&dis[id][xx][yy]==inf&&s[xx][yy]!='#'){
dis[id][xx][yy]=dis[id][x][y]+1;
q.push(make_pair(xx,yy));}}}}intmain(){
while (scanf("%d%d",&n,&m)!=EOF){memset(dis,inf,sizeof(dis));for(int i =1; i <= n; i++)scanf("%s",s[i]+1);for(int i =1; i <= n; i++){for(int j =1; j <= m; j++){if(s[i][j]=='Y')sx[0]=i,sy[0]=j;if(s[i][j]=='M')sx[1]=i,sy[1]=j;}}bfs(0),bfs(1);int res=inf;for(int i =1; i <= n; i++){for(int j =1; j <= m; j++){if(s[i][j]=='@'){
res=min(res,dis[0][i][j]+dis[1][i][j]);}}}printf("%d\n",res*11);}}
二、深搜(DFS)
#include <bits/stdc++.h>
using namespace std;constint N=10+10;int f[N],vis[N],n,cnt;boolcheck(int row,int col){if(vis[col])returnfalse;for(int i =1; i <= n; i++){if(vis[i]&&abs(i-col)==abs(vis[i]-row))returnfalse;}returntrue;}
void dfs(int now){if(now==n+1){
cnt++;return;}for(int i =1; i <= n; i++){if(check(now,i)){
vis[i]=now;dfs(now+1);
vis[i]=0;}}}intmain(){for(n =1; n <=10; n++){memset(vis,0,sizeof(vis));
cnt=0;dfs(1);
f[n]=cnt;}
while (scanf("%d",&n),n){printf("%d\n",f[n]);}}