当前位置: 代码迷 >> 综合 >> 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛- J. Minimum Distance in a Star Graph
  详细解决方案

2017 ACM-ICPC 亚洲区(南宁赛区)网络赛- J. Minimum Distance in a Star Graph

热度:39   发布时间:2023-12-01 22:11:13.0

比赛时看这个题目,第一感觉是BFS,但是以为会超时,还是勇敢去敲了,交了一发,tle了,以为是剪枝问题,就去想更加优化的剪枝方法,就没去检查程序,这个毛病必须得改,过了半个小时,没有想出来,看看程序,sb了,自己本来的剪枝就没有写好,改了,就a了。思路比较简单,看代码吧。

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#include<string>
#include<map>
using namespace std;
char ch[100][100],ph[100][100];
map<string,int>M;
struct Node{char str[100];int type;
};
int n;
int BFS(int cnt)
{queue<Node>que;Node node,node_;strcpy(node.str,ch[cnt]);node.type=0;que.push(node);	M[ch[cnt]]=1;while(!que.empty()){node_=node=que.front();if(strcmp(node.str,ph[cnt])==0)return node.type;que.pop();for(int i=1;i<n;i++){node=node_;swap(node.str[0],node.str[i]);node.type=node.type+1;if(M[node.str]==0)que.push(node),M[node.str]=1; } }
}
int main()
{scanf("%d",&n);getchar();for(int i=0;i<5;i++){M.clear();scanf("%s %s",ch[i],ph[i]);int k=BFS(i);printf("%d\n",k);}return 0;
}
  相关解决方案