P2196 挖地雷

---------------------------

我跟你们说,这就是道假的黄题,普及难度还差不多,太水了

---------------------------

提议没啥好说的,搜索就是了

---------------------------

题目链接:Miku

--------------------------

 1 /*
 2 这是道假的黄题 
 3 
 4 */
 5 
 6 
 7 
 8 
 9 #include<iostream>
10 #include<algorithm>
11 #include<cstring> 
12 #include<queue>
13 #include<cstdio>
14 
15 using namespace std;
16 int now[21];//当前顺序 
17 int ans[21];//答案顺序 
18 int cnt;//答案 
19 int vis[21];//回溯记录 
20 int tu[21][21];//联通 
21 int v[21];//价值 
22 int n;
23 int x;
24 void dfs(int p,int k,int cntt){
25     if(vis[p])
26     return ;
27     vis[p]=1;
28     now[k]=p;
29     for(int i=1;i<=n;++i)
30     {
31         if(i!=p&&tu[p][i]&&!vis[i])//不会重复挖=联通+挖没挖过 
32         {
33             dfs(i,k+1,cntt+v[i]);//递归 
34             vis[i]=0;
35         }
36     }
37     if(cntt>cnt)
38     {
39         cnt=cntt;//记录 
40         for(int i=1;i<=n;++i)
41         {
42             ans[i]=now[i];//更新路径 
43         }
44     }
45     now[k]=0;//这个也要额外处理 
46 }
47 
48 int main(){
49     cin>>n;
50     for(int i=1;i<=n;++i)
51         {
52             cin>>v[i];
53         }
54     for(int i=1;i<=n;++i)
55     {
56         for(int j=i+1;j<=n;++j){
57         cin>>x;
58         if(x)
59         tu[i][j]=1;
60         }
61     }
62     for(int i=1;i<=n;++i)
63     {
64         dfs(i,1,v[i]);
65         vis[i]=0;
66     }
67     for(int i=1;i<=n;++i)
68     {
69         if(!ans[i])
70         break;
71         else
72         cout<<ans[i]<<" ";
73     }
74     cout<<endl<<cnt;
75     return 0;
76 }
AC

----------------------------

Have a good day.

posted @ 2019-06-14 19:18  Simex  阅读(231)  评论(0编辑  收藏  举报