码迷,mamicode.com
首页 > 其他好文 > 详细

FZU三月月赛A——BFS+TSP——小明的迷宫

时间:2015-04-28 20:58:55      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:

Problem Description

小明误入迷宫,塞翁失马焉知非福,原来在迷宫中还藏着一些财宝,小明想获得所有的财宝并离开迷宫。因为小明还是学生,还有家庭作业要做,所以他想尽快获得所有财宝并离开迷宫。

技术分享 Input

有多组测试数据。

每组数据第一行给出两个正整数n,m(0<n,m<=100)。代表迷宫的长和宽。

接着n行,每行m个整数。正数代表财宝(财宝的个数不超过10);负数代表墙,无法通过;0代表通道。

每次移动到相邻的格子,所花费的时间是1秒。小明只能按上、下、左、右四个方向移动。

小明的初始位置是(1,1)。迷宫的出口也在(1,1)。

技术分享 Output

输出获得所有财宝并逃出迷宫所花费的最小时间,如果无法完成目标则输出-1。

技术分享 Sample Input

3 3 0 0 0 0 100 0 0 0 0 2 2 1 1 1 1

技术分享 Sample Output

4 4
大意:从1 1出发,用bfs得到各个点之间的距离,然后用TSP算法解决。bfs1用来搜索是否联通
技术分享
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
int n;
struct edge{
    int x;
    int y;
}a[20];
int temp[20][1<<16],dis[20][20],best[1<<16];
const int inf = 0x3f3f3f3f;
int main()
{
    while(~scanf("%d",&n)){
        for(int i = 0; i < n ; i++)
            scanf("%d%d",&a[i].x,&a[i].y);
        int len = 0;
        int maxn = (1<<n)-1;
        for(int i = 0 ; i < n ; i++)
            for(int j = 0; j <n ; j++)
                dis[j][i] = dis[i][j] = ceil(sqrt((a[i].x-a[j].x)*(a[i].x-a[j].x)+(a[i].y-a[j].y)*(a[i].y-a[j].y)));//dis记录的是各个点之间的距离
        for(int i = 0 ; i <= maxn; i++)
            best[i]= inf;
        for(int i = 0 ; i <= n ; i++)
            for(int j = 0 ; j <= maxn; j++)
                temp[i][j] = inf;
        temp[0][1] = 0;//现在为状态1,当前位置在0的值
        for(int i = 0 ; i <= maxn ; i++){
            for(int j = 0 ; j < n ; j++){
                if(i&(1<<j)){
                    for(int k = 0 ; k < n ; k++)
                        if(!(i&(1<<k)))
                            temp[k][i|(1<<k)] = min(temp[k][i|(1<<k)],temp[j][i]+dis[j][k]);
                }
            }
        }
        int ans = temp[0][maxn];
        for(int i = 1; i < tot ; i++){
            ans = min(ans ,temp[i][maxn] + dis[i][0]);
        printf("%d\n",ans);
    }
    return 0;
}
View Code

 

 

 

 

FZU三月月赛A——BFS+TSP——小明的迷宫

标签:

原文地址:http://www.cnblogs.com/zero-begin/p/4444247.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!