hdu 1572 全排列的搜索

好久没写搜索的题目了 复习一下/。/ 这道题目是暴力的全排列#include<cstdio>
#include<iostream>
#include<cstring>
#define maxn 31
#define inf 1<<29
using namespace std;
int mapp[maxn][maxn],line[8],minn,vis[8];
int k;
int mymin(int x,int y)
{
    if(x>y) return y;
    else return x;
}
void dfs(int pos,int time,int cost)
{
    if(time>k)
    {
        //cout<<minn<<endl;
        minn=mymin(minn,cost);
        return;
    }
    for(int i=1;i<=k;i++)
    {
        if(vis[i]) continue;
        vis[i]=1;
        //cout<<i<<‘ ‘<<time<<endl;
        dfs(i,time+1,cost+mapp[line[pos]][line[i]]);
        vis[i]=0;
    }
}
int main()
{
    int t;
    cin.sync_with_stdio(false);
    while(cin>>t&&t)
    {
        for(int i=0;i<t;i++) for(int j=0;j<t;j++) cin>>mapp[i][j];
        cin>>k;
        for(int i=1;i<=k;i++) cin>>line[i],vis[i]=0;
        minn=inf;
        dfs(0,1,0);
        cout<<minn<<endl;
    }
    return 0;
}
时间: 2024-11-08 19:54:46

hdu 1572 全排列的搜索的相关文章

HDU 4937 Lucky Number 搜索

题意: 给你一个数,求在多少种不同的进制下这个数每一位都是3.4.5.6中的一个. 思路: 搜索.枚举这个数在任意进制下的表示,判断是否合法.当数字只有3.4.5.6时,必定有无穷种. 因为数字太大,所以直接枚举必定会超时. 下面有两种剪枝的方法: 1. 先枚举最后一位的情况. 假设数字n在base进制下表示为 a[n]...a[0],即 n = a[0] + a[1]*base^1 + ... + a[n]*base^n. 则 n - a[0] = a[1]*base^1 + ... + a[

HDU 1078 记忆化搜索

FatMouse and Cheese Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 4575 Accepted Submission(s): 1829 Problem Description FatMouse has stored some cheese in a city. The city can be considered as a

hdu 4960 记忆化搜索 DP

Another OCD Patient Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 490    Accepted Submission(s): 180 Problem Description Xiaoji is an OCD (obsessive-compulsive disorder) patient. This morni

HDU ACM 1043 Eight-&gt;广度优先搜索(BFS)+康托展开(全排列hash)实践

分析:经典的八数码问题,参考别人的代码写的,逆向广搜,把结果保存起来,之后在使用. #include<iostream> #include<queue> using namespace std; #define STATE_COUNT 363000 //因为9!=362880 int fact[]={1,1,2,6,24,120,720,5040,40320,362880}; //0到9的阶乘,用来计算hash值 char dir[4][2]={ {0,1},{0,-1},{1,0

hdu 1560 迭代加深搜索

链接:http://acm.hdu.edu.cn/showproblem.php?pid=1560 只能说bin神太给力了.. 又学到不少新知识.. 迭代加深搜索,貌似 又叫IDA*, 就是给搜索深度一个限制,搜索到一个满足条件就结束. 注意剪枝~ 代码: #include <iostream> #include <cstdio> #include <cstring> using namespace std; char g[10][10]; int size[10];

hdu 5335 Walk Out (搜索)

题目链接: hdu 5335 Walk Out 题目描述: 有一个n*m由0 or 1组成的矩形,探险家要从(1,1)走到(n, m),可以向上下左右四个方向走,但是探险家就是不走寻常路,他想让他所走的路线上的0/1组成的二进数最小,现在要为矫情无比的探险家找最优路径咯. 解题思路: 对于二进制数,前导零是对数字大小没有任何影响的.当到不得不走1的时候就只能向下,或者向右走了.所以先搜索出来一直走零,能走到的最靠近终点的位置,然后在类似搜索,找出最优路径. 1 #include <queue>

hdu 3644 记忆化搜索

题目:给出一个有向图,从1到n,每个结点有个权值,每走一步,分值为结点权值的LCM,而且每一步的LCM都要有变化,问到达N的时候分值恰好为K的路径有多少条 记忆化搜索,虽然做过很多了,但是一直比较慢,这次总结出几点 1.注意确定终点状态 2.状态的初始化 3.不可能状态的排除 代码是参考cxlove写的,kuangbin博客要是刷完了,下一个就刷他啦 1 #include<cstdio> 2 #include<iostream> 3 #include<algorithm>

HDU 5113--Black And White(搜索+剪枝)

题目链接 Problem Description In mathematics, the four color theorem, or the four color map theorem, states that, given any separation of a plane into contiguous regions, producing a figure called a map, no more than four colors are required to color the

hdu 1978 记忆化搜索

How many ways Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 5203    Accepted Submission(s): 3067 Problem Description 这是一个简单的生存游戏,你控制一个机器人从一个棋盘的起始点(1,1)走到棋盘的终点(n,m).游戏的规则描述如下:1.机器人一开始在棋盘的起始点并有起