多种解法,水题。
DFS,BFS,并查集,最短路。
只要B开头能到M结尾。
我建立的最短路模型,然后SPFA。。花式AC。。
#include<cstdio> #include<cstring> #include<string> #include<queue> #include<algorithm> #include<map> #include<stack> #include<iostream> #include<list> #include<set> #include<vector> #include<cmath> #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<lx>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<int>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); } } }
原文地址:http://blog.csdn.net/dongshimou/article/details/39435735