2 条题解

  • 1
    @ 2024-5-24 18:44:28
    #include<bits/stdc++.h>
    using namespace std;
    int n,k,m,s,t,u,v,d,flag,flag2,cnt;
    int c[105],h[105][105],p[105][105],sum[105],bag[105];
    int dfs(int l,int dis){
    	if(dis>=sum[l])return 0;
    	sum[l]=dis;
    	if(l==t){
    		flag=1;
    		return 0;
    	}
    	for(int i=1;i<=n;i++){
    		if(p[l][i]>0){
    			flag2=1;
    			for(int j=1;j<=cnt;j++)if(h[c[i]][bag[j]]==1||c[i]==bag[j])flag2=0;
    			if(flag2==1){
    			    cnt++;bag[cnt]=c[i];
    			    dfs(i,dis+p[l][i]);
    			    cnt--;
    			}
    		}
    	}
    	return 0;
    }
    int main(){
        for(int i=1;i<=100;i++)sum[i]=100000000;
    	cin>>n>>k>>m>>s>>t;
    	for(int i=1;i<=n;i++)cin>>c[i];
    	for(int i=1;i<=k;i++)for(int j=1;j<=k;j++)cin>>h[i][j];
    	for(int i=1;i<=m;i++){
    		cin>>u>>v>>d;
    		if(u>v)swap(u,v);
    		if(p[u][v]==0||d<p[u][v])p[u][v]=d;
    		p[v][u]=d;
    	}
    	cnt=1;bag[1]=c[s];
    	dfs(s,0);
    	if(flag==1)cout<<sum[t]<<endl;
    	else cout<<-1<<endl;
    	return 0;
    }
    
    • -8
      @ 2023-2-6 15:39:53

      写题解请注意

      鼓励大家写题解,但注意题解格式。

      题解一定要有思路解析或代码注释,能否让别人理解你的思路

      也是你的能力的检验,不要只放无意义的代码给大家复制,那就失去了做题的初心。

      给代码两端加上这个会舒服一些

      ```cpp

      你的代码

      ```

      </span>

      这个点在键盘的左上角tab上面那个键,注意切换输入法

      #include<iostream>
      using namespace std;
      int main()
      {
          int n;
          cin>>n;//这是一个注释
          return 0;
      }
      

      请注意严禁抄袭题解,写题解不要只放代码,需加上你的思路或代码注释。

      抄袭题解一经发现直接取消成绩。

      题解被删除的可能

      1. 代码不符合格式规范
      2. 没有思路讲解或者没有注释,
      3. 无意义的题解

      大家携手共同维护一个良好的编程环境,如果一经发现,多次作乱。可能会被管理员拉黑,请注意,一旦拉黑即失去登陆资格。

      • 1

      信息

      ID
      1498
      时间
      1000ms
      内存
      256MiB
      难度
      5
      标签
      递交数
      30
      已通过
      14
      上传者