某坦克需要從A區到B區去(A,B區本身是安全區,沒有正能量或負能量特徵),怎樣走才能路徑最短?
已知的地圖是一個方陣,上面用字母標出了A,B區,其它區都標了正號或負號分別表示正負能量輻射區。
例如:
A + - + -
- + - - +
- + + + -
+ - + - +
B + - + -
坦克車只能水平或垂直方向上移動到相鄰的區。
數據格式要求:
輸入第一行是一個整數n,表示方陣的大小, 4<=n<100
接下來是n行,每行有n個數據,可能是A,B,+,-中的某一個,中間用空格分開。
A,B都只出現一次。
要求輸出一個整數,表示坦克從A區到B區的最少移動步數。
如果沒有方案,則輸出-1
例如:
用戶輸入:
5
A + - + -
- + - - +
- + + + -
+ - + - +
B + - + -
則程序應該輸出:
10
#include<iostream>
#include<algorithm>
using namespace std;
char mp[105][105];
int vis[105][105];
int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0};
int mn=10000,n;
int l[50][2];
int judge=0;
void dfs(int x,int y,int way,char last)
{
if(mp[x][y]=='B' || way>mn)
{
judge=1;
mn=min(way,mn);
return;
}
for(int i=0;i<4;i++)
{
int xx=x+dx[i];
int yy=y+dy[i];
if(xx<0 || xx>=n || yy<0 || yy>=n || mp[xx][yy]==last)
{
continue;
}
if(vis[xx][yy]==0)
{
vis[xx][yy]=1;
dfs(xx,yy,way+1,mp[xx][yy]);
vis[xx][yy]=0;
}
}
}
int main()
{
int sx,sy;
cin>>n;
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
cin>>mp[i][j];
if(mp[i][j]=='A')
{
sx=i,sy=j;
}
}
}
vis[sx][sy]=1;
dfs(sx,sy,0,'A');
if(judge==1)
cout<<mn<<endl;
else
cout<<judge<<endl;
return 0;
}