#include<bits/stdc++.h>
using namespace std;
#define N 105
#define MAX INT_MAX/2
int n,m,k;
int mat[N][N];
int path[N];
typedef struct{
int x,y;
int cst;
}node;
int cal(const node&a,const node&b){
return abs(a.x-b.x)+abs(a.y-b.y);
}
vector<node> update(vector<node>nst,int to){//动态规划更新最短路径
vector<node>updateNst;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(mat[i][j]==to){
node tmp;
tmp.x=i,tmp.y=j;tmp.cst=MAX;
for(auto item:nst){
int cst=item.cst+cal(item,tmp);
tmp.cst=cst<tmp.cst?cst:tmp.cst;
}
updateNst.push_back(tmp);
}
}
}
return updateNst;
}
int main(){
cin>>n>>m>>k;
char c;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cin>>c;
mat[i][j]=c-'a';
}
}
for(int i=0;i<k;i++){
cin>>c;
path[i]=c-'a';
}
vector<node>nst;
for(int i=0;i<n;i++){//初始化
for(int j=0;j<m;j++){
if(mat[i][j]==path[0]){
node tmp;
tmp.x=i,tmp.y=j,tmp.cst=0;
nst.push_back(tmp);
}
}
}
for(int i=1;i<k;i++){
nst=update(nst,path[i]);
}
int ret=MAX;
for(auto item:nst){
ret=item.cst<ret?item.cst:ret;
}
cout<<ret<<endl;
}
【人工智能】字符路径
于 2023-04-04 17:23:22 首次发布