题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1571
思路:纯模拟,vector的应用。
![](https://i-blog.csdnimg.cn/blog_migrate/cdec0645add3fc3c328197dda5c76203.gif)
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<vector> 5 using namespace std; 6 #define MAXN 33 7 int map[MAXN][MAXN]; 8 int n; 9 10 int main(){ 11 while(~scanf("%d",&n)&&n){ 12 for(int i=0;i<n;i++){ 13 for(int j=0;j<n;j++){ 14 scanf("%d",&map[i][j]); 15 } 16 } 17 int _case; 18 scanf("%d",&_case); 19 vector<int>vet; 20 vector<int>::iterator iter; 21 int start=0,end,dist=0; 22 while(_case--){ 23 char str[10]; 24 scanf("%s",str); 25 if(str[0]=='U'){ 26 scanf("%d",&end); 27 if(end==start||vet.size()==7)continue; 28 vet.push_back(end); 29 }else { 30 if(!vet.empty()){end=vet.front();dist+=map[start][end];start=end;} 31 iter=vet.begin(); 32 while(iter!=vet.end()){ 33 if((*iter)==end){ 34 iter=vet.erase(iter);//返回指向vector的下一个位置 35 }else 36 iter++; 37 } 38 } 39 } 40 printf("%d\n",dist); 41 } 42 return 0; 43 }