Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
不知道是咋了,,,总是WA,,,,,#include<iostream> #include<queue> using namespace std; queue<int> q;// 定义队列 int *m; int mark[101][101]; bool dfs(int nod_father,int nod,int et,int **c,int n){ if(nod_father==et){// 从 nod 开始找 到了 return true; } for(int l=0;l<n;l++){ if(l!=nod && c[nod_father][l]==1 && !mark[nod_father][l]){ mark[nod_father][l]=1; dfs(l,nod,et,c,n); mark[nod_father][l]=0; } } return false; } bool seatch(int nod,int e,int n,int **c){// 找到 nod 的父结点是否有不经过过 nod 找到 e 点的 ,有则返回 false for(int r=0;r<n;r++){ if(c[r][nod]==1){// 找到 nod 父节点 r memset(mark,0,sizeof(mark)); if(!dfs(r,nod,e,c,n)){ return true; } } } return false; } void solve(int **c,int n,int e){// int et=e; for(int i=0;i<n;i++){// i 表示的是行值 if(c[i][et]==1 && m[i]==0){// 找到离 ET 最近的点 nod q.push(i); m[i]=1; } } while(!q.empty()){ et=q.front(); q.pop(); for(int i=0;i<n;i++){// i 表示的是行值 if(c[i][et]==1 && m[i]==0){// 找到离 ET 最近的点 nod q.push(i); m[i]=1; } } if(seatch(et, e, n,c)){ cout<<"Put guards in room "<<et<<"."<<endl; return ; } } } int main(void){ int n,e,**c; int i,j; int *v; cin>>n>>e; c=new int*[n]; m=new int[n]; v=new int[n]; for( i=0;i<n;i++){ m[i]=0; v[i]=0; c[i]=new int[n]; for( j=0;j<n;j++){ c[i][j]=0; mark[i][j]=0; } } int t=n; int a,b; while(cin>>a>>b){ c[a][b]=1; } solve(c,n,e); return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator