下沙小面的2(dfs,微处理)

前文再续,书接上一题。话说当上小面的司机的Lele在施行他的那一套拉客法则以后,由于走的路线太长,油费又贵,不久便亏本了。(真可怜~)于是他又想了一个拉客的办法。 

对于每一次拉客活动,他一次性把乘客都拉上车(当然也不会超过7个,因为位置只有7个)。然后,Lele计算出一条路线(出于某些目的,Lele只把车上乘客的目的地作为这条路线上的站点),把所有乘客都送到目的地(在这路线上不拉上其他乘客),并且使总路线长度最短。 

不过Lele每次都要花很多时间来想路线,你能写个程序帮他嘛?
Input本题目包含多组测试。最后一组测试后有一个0代表结束。 
每组测试第一行有一个整数NCity(3<=NCity<=30)表示下沙一共有多少个站点(站点从0开始标号)。 
然后给你一个 NCity * NCity 的矩阵,表示站点间的两两距离。即这个矩阵中第 i 行 第 j 列的元素表示站点 i 和站点 j 的距离。(0<=距离<=1000) 
再然后有一个整数K(1<=K<=7),表示Lele拉上车的人数。 
接下来的一行里包括 K 个整数,代表上车的人分别要去的站点。(0<站点<NCity) 

注意: 
对于每组测试,Lele都是在站点0拉上乘客的。Output对于每一组测试,在一行内输出一个整数,表示最短路线的长度。Sample Input
3
0 1 2
1 0 3
2 3 0
3
1 1 2
0
Sample Output
4


题意:一辆能坐K个人车,送这K人去想去的地方. 有n个city点,并且车车每次都从0点开始出发;

分析:一个简单的深搜,要维处理一下;因为可能会有几个人在同一站下车,所以我们只要标记要去几个站点,而不是有几个人.(因为人是固定的7个人)这个要绕一绕.

其次,最重要的就是dfs()传参.    首先是还剩几个点没去,其次是上一个站点,最后是距离.(别问我怎么想的,我一开始也是别人博客的)


那么思路就是;

首先存储要去的点.然后dfs然后比较距离.求最短距离.

重点在dfs的传参    和    if判断(如果所有人都下车了那么比较距离)


那就上代码了.

//#include<stdio.h>//下沙小面的2
//#include<string.h>
//int n,k,kk,min;
//int city[35][35],vis[35];
//void dfs(int r,int flag,int dis)//r代表已经去过地点的次数,flag代表上一个去过的地点,dis表示总距离
//{
//    if(r==kk)//如果乘客全都下车了,则比较总路程,更新最小值.
//    {
//        min=min>dis?dis:min;
//        return ;
//    }
//    for(int i=0; i<n; i++)//遍历每个地点,如果有要去的地点则进入.
//    {
//        if(vis[i])
//        {
//            vis[i]=0;
//            dfs(r+1,i,dis+city[flag][i]);
//            vis[i]=1;
//        }
//    }
//}
//int main()
//{
//    int i,j;
//    while(~scanf("%d",&n)&&n)
//    {
//        kk=0;
//        min=1000000;
//        memset(vis,0,sizeof(vis));
//        for(i=0; i<n; i++)
//            for(j=0; j<n; j++)
//                scanf("%d",&city[i][j]);
//
//        scanf("%d",&k);//将要去的地点标记.
//        for(i=0; i<k; i++)
//        {
//            scanf("%d",&j);
//            if(!vis[j])//并且标记.通过vis下标来表示要去的地点,内容来判断这些地点是否要去
//            {
//                vis[j]=1;
//                kk++;//并且记录多少个要去的不同地点.
//            }
//        }
//
//        dfs(0,0,0);
//        printf("%d\n",min);
//    }
//}

ps:2018年4月10日 02:37:16

大半夜的写博客.精神恍恍惚惚的.这样不好,但只有晚上能挤出多余的时间来追上或者超越他们.

虽然之前做过一遍了但是思路不是很清楚,恍恍惚惚,看博客做完了.感觉自己掌握的并不好.

啊,好烦啊,但是只要多做总有一天我会自己处理理解的吧.

加油啊!!!!!!!

绝不能堕落下去,绝对要进省赛集训啊.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值