2017.5.9 寻找道路 思考记录

来源:互联网 发布:软件开发入门 编辑:程序博客网 时间:2024/06/09 22:25

        一定认真读题,不然被坑死

      注意是根据这个点的下一个点判断这个点、、

      而且写代码一定注意每个语句的细节

   码:

#include<iostream>#include<cstdio>using namespace std;#include<queue>#include<vector>#include<cstring>int st,nd,f[10050],s,t,n,m,i,x,y,j;bool zout[10050],keyi,dian[10050],vis[10050];queue<int> q;vector<int>v[10050],v2[10050];void dfs(int now){int i;for(i=0;i<v2[now].size();i++){if(zout[v2[now][i]])continue;zout[v2[now][i]]=1;dfs(v2[now][i]);}}int spfa(int now){int st,i,nd;memset(f,0x7f,sizeof(f));f[s]=0;q.push(s);while(!q.empty()){ st=q.front();     vis[st]=0; q.pop();for(i=0;i<v[st].size();i++){nd=v[st][i];if(dian[nd])continue;        if(f[nd]>f[st]+1){f[nd]=f[st]+1;if(!vis[nd])vis[nd]=1,q.push(nd);    }}}if(f[t]>1e7)return -1;else return f[t];}int main(){scanf("%d%d",&n,&m);for(i=1;i<=m;i++){scanf("%d%d",&x,&y);v[x].push_back(y);v2[y].push_back(x);}scanf("%d%d",&s,&t);zout[t]=1;dfs(t);for(i=1;i<=n;i++){keyi=1;for(j=0;j<v[i].size();j++){if(!zout[v[i][j]]){keyi=0;break;}}if(keyi==0)dian[i]=1;//else cout<<i<<" ";}dian[s]=1;cout<<spfa(s);}


0 0
原创粉丝点击