多种解法,水题。
DFS,BFS,并查集,最短路。
只要B开头能到M结尾。
我建立的最短路模型,然后SPFA。。花式AC。。
#include #include #include #include #include #include #include #include #include #include #include #include #define INF 0x7fffffff #define eps 1e-8 #define LL long long #define PI 3.141592654 #define CLR(a,b) memset(a,b,sizeof(a)) #define FOR(i,a,n) for(int i= a;i< n ;i++) #define debug puts("==fuck==") #define acfun std::ios::sync_with_stdio(false) #define SIZE 20+10 using namespace std; struct lx { int v,len; void init(int vv,int ll) { v=vv,len=ll; } }; vector g[27]; void SPFA() { int dis[27]; bool vis[27]; FOR(i,0,26) { dis[i]=INF; vis[i]=0; } dis[1]=0,vis[1]=1; queue q; q.push(1); while(!q.empty()) { int u=q.front(); q.pop(); vis[u]=0; FOR(j,0,g[u].size()) { int v=g[u][j].v; int len=g[u][j].len; if(dis[v]>dis[u]+len) { dis[v]=dis[u]+len; if(!vis[v]) { vis[v]=1; q.push(v); } } } } if(dis[12]==INF) puts("No."); else puts("Yes."); } int main() { char str[101]; while(~scanf("%s",str)) { if(str[0]=='0') { SPFA(); FOR(i,0,26) g[i].clear(); continue; } else { int len=strlen(str)-1; lx now; now.init(str[len]-'a',1); g[str[0]-'a'].push_back(now); } } }