- 浏览: 117332 次
最新评论
-
witcheryne:
apache commons http client 很重.推 ...
HTTPClient模块的HttpGet和HttpPost -
jun4997:
JAVA如何自己写方法读取BMP文件 -
肆无忌惮_:
人生难得糊涂 写道肆无忌惮_ 写道注释好少啊,看不懂 写了个五 ...
人工智能原来如此简单——你所见过的最好的五子棋 -
人生难得糊涂:
肆无忌惮_ 写道注释好少啊,看不懂 写了个五子棋人机算法的PP ...
人工智能原来如此简单——你所见过的最好的五子棋 -
肆无忌惮_:
注释好少啊,看不懂
人工智能原来如此简单——你所见过的最好的五子棋
文章列表
整整一天都在弄这个 ,终于AC了 。
需要注意的地方都在代码注释里了!
#include<iostream>
#include<cstdio>
#include<string>
#include<algorithm>
using namespace std;
#define EMAX 1030
int t,n;
int num;//记录边数目
int vis[30];
int head[EMAX];
int next[EMAX];
int fa[30];
int in[30];
in ...
题意:求一个图所有生成树中 最大边与最小边的差的最小值。
解题思路:要求max-min的最小值 就是要让max最小 min 最大。 而我们的kruskal算法求得的当前生成树的max一定是最小的。所以我们只要将min从小到大遍历,然后求得最小值即可。(语言表达的有点绕口,建议参照代码结合着看)。
#include "iostream"
#include "algorithm"
using namespace std;
#define MAXSIZE 6000
#define INF 100000
struct node{
int u ...
此题要注意松弛条件
#include<iostream>
#include<queue>
using namespace std;
#define MAXSIZE 1000
typedef struct node{
int u;
int v;
double w;
double c;
}node;
node p[MAXSIZE];
int head[MAXSIZE];
int next[MAXSIZE];
int n,m,s;
double dis[MAXSIZE];
double v;//v 为初始拥有的货币数量
int ...
裸PRIM 没什么好说的
#include<iostream>
using namespace std;
#define MAXSIZE 2010
#define INF 100000
int map[MAXSIZE][MAXSIZE];
int dp[MAXSIZE][MAXSIZE];
int n;
int vis[MAXSIZE];
int dis[MAXSIZE];//记录已有的树到该点的最短距离
int prim()
{
int i,j,ans=0;
memset(vis,0,sizeof(vis));
//把第一个顶点加入集合
...
之前也写过Kruskal算法,到今天才发现 原来以前的写错了。(也不能说完全错,只是效率好低)。
以前忽视的地方主要有两点,一是Kruskal算法,一般先对边从小到大排好序,然后从小到大区边。
这样的话,排完序以后就只要一个循环就可以走完。
二是 并查集的路径压缩,我以前对并查集合并是遍历所有的结点对两个集合合并,
而正确的做法应该是这样
int flindfather(int a)
{
if(a==father[a])
return a;
else
return findfather(father[a]);
}
而其实我们还可以进行路径压缩,这才是并 ...
一道求最短路径的最长边的题,本身没什么好说的。 很大的一个问题是在输入上面,怎么把字符串中的数字转换为整数 。
可以用C中的
int t =atoi(char *c)方法
discuss中也有人给出了另一种方法
if(scanf("%d",&m)!=0)
map[i][j]=map[j][i]=m;
else
{
map[i][j]=map[j][i]=INITMAX;
scanf("x");
}
因为
scanf("%d%d",&a,&b);
如 ...
题目大意:
给你p门课程和n个学生,一个学生可以选0门,1门,或者多门课程,现在要求一个由p个学生组成的集合,满足下列2个条件:
1.每个学生选择一个不同的课程
2.每个课程都有不同的代表
如果满足,就输出YES
题解:直接用二分图最大匹配即可,得到的匹配数如果等于课堂个数,则输出YES
#include<iostream>
using namespace std;
#define MAXSIZE 310
int map[MAXSIZE][MAXSIZE];
int vis[MAXSIZE];//是否拜访过
int isWho[MAXSIZE];//记录右边的 ...
这题是多源点多汇点的问题,对于此类问题,只要建立一个超级原点,和超级汇点就行了 ,超级源点可以到原图中所有的点,原图中所有的点都可以到超级汇点。而解决最大流问题用的是EK算法。 不了解的请自行百度。
#include<iostream>
#include<queue>
using namespace std;
#define MAXSIZE 130
int map[MAXSIZE][MAXSIZE];
int pre[MAXSIZE];
queue<int>que;
int n,np,nc,m;
int bfs(int src,int de ...
题目大意:在大学里有许许多多的课程,现在小明需要去选择课程,他是一个爱学习的人,所以想尽可能多的选择课程, 在学校里有n个课程,并且在学校规定,每周里的每天有12节课,那么一周就有7*12节课。 输入第一行为n,代表有n个课程 接下来n行,每行第一个数字x代表这个课程在这一周里面需要上x次。 然后跟着x对数字,第一个D代表这周的哪一天,第二个C代表这天的哪一节课 如果几个课程都在那d天的那c节课上课,那么你需要选择其中的一个,而不能选择多个课程 现在要求算出小明最多可以选择多少个课程.(题意翻译来自http://blog.csdn.net/wangjian8006/article/detail ...
本文做的压缩软件其压缩算法是哈夫曼压缩, 不了解哈夫曼编码基本思想的同学请自行百度。
哈夫曼压缩软件基本思路:
一.压缩
1.统计文件中各字节出现的次数。
2.根据第一步结果建立哈夫曼树
3.得到每个字节的哈夫曼编码
4.对文件每个字节进行编码,以每8位为一字节写入到压缩后的文件
压缩文件内容:
新的哈夫曼编码表(原哈夫曼表的每对KEY 与VALUE 调换位置)+文件编码+补0个数(占一字节)
二:解压
1.读入哈夫曼编码表
2.每读入一个字节就将其转换为其二进制形式的字符串,判断是否为哈夫曼码
3.第二步的结果如果哈夫曼编码,则译码并写入解压文件,否则继续 ...
从开始着手做五子棋,到现在已经有一段时间了。这个项目也算告一段落。 从开始做的网络版,再到加入人机元素, 可谓是耗尽精力。 人机水平达到了比较牛逼的程度,可以战胜大多数人(略显夸张。。) 大言不惭的说最好,也是不符合程序猿严谨的风格,在新手中看来这个程序应该是写的可以了。但大牛看来就是乱七八糟(被大牛吐槽过)。。人机写到这个程度感觉再要进一步很难了。所以就先把这个版本发出来。
先看下效果图吧。 还是很漂亮的吧。这个界面也花了我很久的时间。
登陆界面
人机界面
可以更换背景
网络人人版
可下棋聊天
...
poj1251
用的是Kruskal算法 以及并查集
#include "iostream"
using namespace std;
#define maxsize 110
typedef struct Edge
{
int weight;//权值
int node1;//顶点
int node2;//顶点
} Edge;
Edge e[maxsize];
int vis[maxsize];
int putIn(int n)
{
//输入
char ch;
int num;
char ch1;
...
此题就是prim算法模板
直接给代码、
#include "iostream"
using namespace std;
#define MAXSIZE 102
int map[MAXSIZE][MAXSIZE];
int vis[MAXSIZE];
int temp[MAXSIZE];
int main()
{
int n;
while (scanf("%d",&n)!=EOF)
{
int ans=0;
int i,j;
for (i=0;i<n;i++)
{
for ( ...
本文来自:高爽|Coder,原文地址:http://blog.csdn.net/ghsau/article/details/7433673,转载请注明。
上一篇讲述了线程的互斥(同步),但是在很多情况下,仅仅同步是不够的,还需要线程与线程协作(通信),生产者/消费者问 ...
在JAVA中,线程与线程之间的数据是共享的,因此,当多个线程同时改变相同的对象,线程会相互倾轧。根据线程访问数据的不同线性,会产生被腐蚀的对象。
为了避免这种现象,我们需要对需要保护的对象上锁,这样在同一时间只能有一个线程访问这个数据,而其他的线程进入等待队列,知道这个线程访问完数据并释放锁,等待队列中的线程才能获得锁。
上锁的方法有多种,这里只写出常用的三种
1.synchronized代码块
synchronized (object)
{}
例如:
public class TraditionalThreadSynchronized {
public static ...