最短路思路

当年的word 排版  然后 附上代码

1枚举法A

A =[2 15 13 4;10 4 14 15 ;9 14 16 13 ;7 8 11 9];

B = zeros(4,4);

F=zeros(4,4); %满足要求的分配方案

x=[];y=[];w=0;e=0;

for i=1:4

B(1,:)=0; B(1,i)=1;

for j=1:4

B(2,:)=0;

if(j~=i) B(2,j)=1;end

for k=1:4

B(3,:)=0;

if(k~=i && k~=j) B(3,k)=1;end

for m=1:4

B(4,:)=0;

if(m~=i && m~=j && m~=k)B(4,m)=1;end

sum=0;

for aa=1:4

for bb = 1:4

sum = sum+B(aa,bb);

end

end

num=0;

if(sum==4)

F = B;

y = [y,F];

for aa=1:4

for bb = 1:4

num = num+F(aa,bb)*A(aa,bb);

end

end

w=w+1;

x(w)=num;

end

end

end

end

end

[k,g]=min(x)

M=[y(1,4*g+1:4*g+4);y(2,4*g+1:4*g+4);y(3,4*g+1:4*g+4);y(4,4*g+1:4*g+4)]

2枚举法B

A=[15 18 21 24;19 23 22 18;26 17 16 19;19 21 23 17];

D=zeros(4,4);

E=zeros(24,4);

p=1;

l=1;

for i=1:4

a=A(1,i);

for j=1:4

if i~=j

b=A(2,j);

end

for h=1:4

if h~=i&&h~=j

c=A(3,h);

end

for k=1:4

if k~=i&&k~=j&&k~=h

d=A(4,k);

end

if  i~=j &&j~=h&&h~=k&&i~=h&&j~=k&&i~=k

s(p)=a+b+c+d;

p=p+1;

E(l,:)=[i j h k];

l=l+1;

end

end

end

end

end

[t,v]=min(s)

n=E(v,:);

D(1,E(v,1))=1;

D(2,E(v,2))=1;

D(3,E(v,3))=1;

D(4,E(v,4))=1;

D

3匈牙利法

A=[2 15 13 4;10 4 14 15;9 14 16 13;7 8 11 9];E=A;

for i=1:4=min(A(i,:));

end

A(1,:)=A(1,:)-m(1,1);

A(2,:)=A(2,:)-m(1,2);

A(3,:)=A(3,:)-m(1,3);

A(4,:)=A(4,:)-m(1,4);

k=min(A)

A(:,1)=A(:,1)-k(1,1);

A(:,2)=A(:,2)-k(1,2);

A(:,3)=A(:,3)-k(1,3);

A(:,4)=A(:,4)-k(1,4)

A1=find(A(1,:)==0);

A2=find(A(2,:)==0);

A3=find(A(3,:)==0);

A4=find(A(4,:)==0);

for i=1:length(A1)

for j=1:length(A2)

for k=1:length( A3)

for l=1:length(A4)

B=[A1(i) A2(j) A3(k) A4(l)];

C=unique(B);

if  size(C)==[1 4]

B

end

end

end

end

end

f=E(1,B(1))+E(2,B(2))+E(3,B(3))+E(4,B(4))

4精简版

A=[2 15 13 4;10 4 14 15;9 14 16 13;7 8 11 9];

ans=inf;

for i=1:4

for j=1:4

for k=1:4

for l=1:4

if length(unique([i j k l]))==4

if A(1,i)+A(2,j)+A(3,k)+A(4,l)<ans

ans=A(1,i)+A(2,j)+A(3,k)+A(4,l);

index=[i j k l]

end

end

end

end

end

end

ans

index

来自网络版

c=[ 2 15 13 4 100;10 4 14 15 100;9 14 16 13 100;7 8 11 9 100;100 100 100 100 100];

c=c(:);   a=zeros(10,25);

for i=1:5

a(i,(i-1)*5+1:5*i)=1;   a(5+i,i:5:25)=1;

end

b=ones(10,1);   [x,y]=bintprog(c,[],[],a,b);

x=reshape(x,[5,5]),d=y-100

这些 都是 讨论然后  优化了,感觉就是 其中FOR循环用得6起,最后附录一图

算是怀念

时间: 2024-10-25 08:47:33

最短路思路的相关文章

HDU 3760(最短路思路)

先倒着从n bfs一遍求出bfs树每层的节点,然后从1贪心的走回来就行了 这个贪心用两个queue即可实现. #include <cstdio> #include <cstring> #include <algorithm> #include <iostream> #include <queue> using namespace std; typedef long long ll; typedef pair<int,int> pii;

HDU 3416 Marriage Match IV(最短路+最大流)

HDU 3416 Marriage Match IV 题目链接 题意:给一个有向图,给定起点终点,问最多多少条点可以重复,边不能重复的最短路 思路:边不能重复,以为着每个边的容量就是1了,最大流问题,那么问题只要能把最短路上的边找出来,跑一下最大流即可,判断一条边是否是最短路上的边,就从起点和终点各做一次dijstra,求出最短路距离后,如果一条边满足d1[u] + d2[v] + w(u, v) == Mindist,那么这条边就是了 代码: #include <cstdio> #inclu

最短路与次短路

1.poj3255  求次短路 思路:遍历每条边<u, v>, 看begin[u] + dis<u, v> + end[v] 是否为次短路 //求次短路 #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #include <vector> #include <cmath> #include <queu

【司雨寒】最短路专题总结

最近在刷郏老大博客上的最短路专题 [HDU] 1548            A strange lift                    基础最短路(或bfs) 1 //#define LOCAL 2 #include <iostream> 3 #include <cstdio> 4 #include <cstring> 5 using namespace std; 6 7 const int maxn = 200 + 10; 8 struct Point 9

【NOIP复习】最短路总结

[模板] 1 /*堆优化Dijkstra*/ 2 3 void dijkstra() 4 { 5 priority_queue<pair<ll,int>,vector<pair<ll,int> >,greater<pair<ll,int> > > que;//定义大顶堆 6 for (int i=1;i<=n;i++) vis[i]=0,dis[i]=INF; 7 dis[1]=0; 8 que.push(make_pair&l

【poj 1724】 ROADS 最短路(dijkstra+优先队列)

ROADS Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 12436 Accepted: 4591 Description N cities named with numbers 1 - N are connected with one-way roads. Each road has two parameters associated with it : the road length and the toll that

POJ 2448(K短路,A*+SPFA) Remmarguts&#39; Date

题意 给一个n个点m条边的图,然后给一个起点和一个终点,求起点到终点的第K短路. 思路 求第K短路.一个经典的问题. SPFA+A* 核心思想在A*搜索的估计函数的建立上. F(x) = g(x) + h(x) 估价函数 = s到x的距离 + x到t的距离 估价函数的含义就是经过x这个点的路径的距离. 我们在搜索的时候每次选择估价函数较小的值,进行拓展.这样我们搜索到t点的状态出来顺序就是,最短路-次短路-.第三短路- 就减少了我们搜索的状态数. 代码实现上,实现一个估价函数的结构体,然后是实现

Light OJ 1316 A Wedding Party 最短路+状态压缩DP

题目来源:Light OJ 1316 1316 - A Wedding Party 题意:和HDU 4284 差不多 有一些商店 从起点到终点在走过尽量多商店的情况下求最短路 思路:首先预处理每两点之前的最短路 然后只考虑那些商店 个数小于15嘛 就是TSP问题 状态压缩DP搞一下 状态压缩姿势不对 有必要加强 #include <cstdio> #include <algorithm> #include <queue> #include <vector>

浙大PAT CCCC L3-014 周游世界 ( 最短路变形 )

题目链接 题意 : 中文题请点链接,挺复杂的... 分析 : 乍一看是个最短路,实际就真的是个最短路.如果没有 " 在有多条最短路径的时候输出换乘次数最少的" 这一条件的约束,那么这题就是直接建图然后跑个 Dij 就行了,那有了这个约束条件还是要大胆的向最短路思路靠,题目既然需要换乘次数少的,那么我们在进行最短路松弛操作的时候,面对松弛过后最短路径相等的情况就要分开讨论,这时候为了方法取最优值,需要多记录一个信息 ==> 跑到当前点时候换乘次数是多少次,开个数组来记录就行了,其他