hdu 1181——变形课

来源:互联网 发布:java一般怎么调试文件 编辑:程序博客网 时间:2024/05/25 12:22

做法一:最短路 dij

#include<iostream>#include<cstring>#include<cstdio>using namespace std;#define INF 1000001int map[26][26];int dis[26];int vis[26];int s='b'-'a',e='m'-'a';void makeset(){int i,j;for(i=0;i<26;i++)for(j=0;j<26;j++)map[i][j]=INF;for(i=0;i<26;i++){dis[i]=INF;vis[i]=0;map[i][i]=0;}dis[s]=0;vis[s]=1;}int dij(){int i,j;int min;int temp;for(i=0;i<26;i++)dis[i]=map[s][i];for(i=0;i<26;i++){min=INF;temp=s;for(j=0;j<26;j++){if(min>dis[j]&&!vis[j]){min=dis[j];temp=j;}}vis[temp]=1;for(j=0;j<26;j++){if(!vis[j]&&dis[j]>dis[temp]+map[temp][j])dis[j]=dis[temp]+map[temp][j];}if(dis[e]<INF)return 1;}return 0;}int main(){int l;char str[100];makeset();while(cin>>str){if(str[0]=='0'){if(dij()){printf("Yes.\n");}elseprintf("No.\n");makeset();continue;}else{l=strlen(str);map[str[0]-'a'][str[l-1]-'a']=1;}}return 0;}

做法2:深搜

#include<cstdio>#include<iostream>#include<cstring>using namespace std;int map[26][26];int vis[26];int flag;int s='b'-'a',e='m'-'a';void dfs(int x){int i;if(flag)return ;if(x==e){flag=1;return ;}for(i=0;i<26;i++){if(map[x][i]==1&&!vis[i]){vis[i]=1;dfs(i);}}}int main(){int i,j;int l;char str[100];flag=0;memset(map,0,sizeof(map));memset(vis,0,sizeof(vis));while(cin>>str){if(str[0]=='0'){dfs(s);if(flag)printf("Yes.\n");elseprintf("No.\n");flag=0;memset(map,0,sizeof(map));memset(vis,0,sizeof(vis));continue;}else{l=strlen(str);map[str[0]-'a'][str[l-1]-'a']=1;}}return 0;}


原创粉丝点击