SPQuery WARNING: Query word length is less than min infix length. word: 'a*' Main.java 免费开源代码阅读 开发,分享 - CodeForge.cn
CodeForge QQ客服 CodeForge 400电话 客服电话 4006316121

Main.java ( 文件浏览 )

  • 发布于2010-08-09
  • 浏览次数:14
  • 下载次数:1
  • 下载需 1 积分
  • 侵权举报
			/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package puzzle;

/** 
 *
 * @author Slayer86
 */

//import puzzle.Wezel;
//import puzzle.Drzewo;
import java.util.Random;
import java.io.BufferedReader;
import java.io.IOException;
//import java.io.InputStream;
import java.io.InputStreamReader;

//import java.util.ArrayList;

public class Main {


    /**
     * @param args the command line arguments
     */
    public static boolean[] stanHash = new boolean[1324234];
    
    public static int hashF1(Wezel lisc)
    {

      int hash;
      hash = lisc.stan[0][0]*100000000+lisc.stan[0][1]*10000000;
      hash+= lisc.stan[0][2]*1000000+lisc.stan[1][0]*100000;
      hash+= lisc.stan[1][1]*10000+lisc.stan[1][2]*1000;
      hash+= lisc.stan[2][0]*100+lisc.stan[2][1]*10+lisc.stan[2][2];
      return hash;
    
}
    
    public static void WypiszPuzzle(Wezel wezel)
    {

        for (int i = 0; i < 3; i++)        
        {

            for (int j = 0; j < 3; j++)
                System.out.print("[" + wezel.stan[i][j] + "]");
            System.out.print("\n");    
        
}                
    
}
    
    public static boolean Wygrana(Wezel wezel)
    {

        if (wezel.stan[0][0] == 1 &&
            wezel.stan[0][1] == 2 &&
            wezel.stan[0][2] == 3 &&
            wezel.stan[1][0] == 4 &&
            wezel.stan[1][1] == 5 &&
            wezel.stan[1][2] == 6 &&
            wezel.stan[2][0] == 7 &&
            wezel.stan[2][1] == 8 && wezel.stan[2][2] == 0)
            return true;
        else
            return false;
    
}
    public static int licznik=0;
    public static int zero[][]=new int[3][3];
    public static int funOceniajaca1(Wezel temp)
    {

        int ocena=0;
        for (int i=0; i<3; i++)
            for (int j=0; j<3; j++)
                if (temp.stan[i][j]!=zero[i][j])
                    ocena++;
	return ocena;
    
}
    public static int funOceniajaca2(Wezel temp)
    {

        int ocena=0;
        int w1=0,k1=0,w2=0,k2=0;
        for (int l=1; l<9; l++)
        {

            for (int i=0; i<3; i++)
                for (int j=0; j<3; j++)
                {

                    if (zero[i][j]==l)
                    {

                        w1=i;
                        k1=j;
                    
}
                    if (temp.stan[i][j]==l)
                    {

                        w2=i;
                        k2=j;
                    
}
                
}
            if (w1!=w2) ocena+=Math.abs(w1-w2);
            if (k1!=k2) ocena+=Math.abs(k1-k2);
        
}
        return ocena;
    
}
    public static Wezel BudujDrzewo(Wezel wezel)
    {

        Drzewo tree=new Drzewo();
        int x0=0; 
        int y0=0;
        int hash=0;
        //boolean jest;
        tree.open.add(wezel);
        while(!tree.open.isEmpty())
        {

            Wezel lisc=tree.open.get(0);
            tree.open.remove(0);
            tree.closed.add(lisc);
            for (int i=0; i<3; i++)
                for (int j=0; j<3; j++)
                    if (lisc.stan[i][j] == 0)
                    {

                        x0 = i;
                        y0 = j;
                    
}
            if (x0 - 1 >= 0) //gora
            {

                //jest=false;
                Wezel temp=new Wezel(lisc.stan);
                int pom = temp.stan[x0][y0];
                temp.stan[x0][y0] = temp.stan[x0 - 1][y0];
                temp.stan[x0 - 1][y0] = pom;
                
                //ustalenie hash-u
                hash = hashF1(temp);
                
                //sprawdzenie czy takiego sanu nie ma juz w drzewie, za pomoca tablicy hash-ow
                //1324234 oraz 1324213 losowe liczby przeciwdzalajace temu zeby 2 stany nie mialy tego samego hash-u
                if (stanHash[hash % 1324234] != true && stanHash[hash % 1324213] != true)
                {

                    stanHash[hash % 1324234] = true;
                    stanHash[hash % 1324213] = true;
                    temp.rodzic=lisc;
                    lisc.gora=temp;
                    tree.open.add(lisc.gora);
                    //wezel=lisc;
                    licznik+=1;
                
}  
                
            
}
            if (x0 + 1 <= 2) //dol
            {

                //jest=false;
                Wezel temp=new Wezel(lisc.stan);
                int pom = temp.stan[x0][y0];
                temp.stan[x0][y0] = temp.stan[x0 + 1][y0];
                temp.stan[x0 + 1][y0] = pom;
                
                 //ustalenie hash-u
                hash = hashF1(temp);
                
                //sprawdzenie czy takiego sanu nie ma juz w drzewie, za pomoca tablicy hash-ow
                //1324234 oraz 1324213 losowe liczby przeciwdzalajace temu zeby 2 stany nie mialy tego samego hash-u
                if (stanHash[hash % 1324234] != true && stanHash[hash % 1324213] != true)
                {

                    stanHash[hash % 1324234] = true;
                    stanHash[hash % 1324213] = true;
                    temp.rodzic=lisc;
                    lisc.dol=temp;
                    tree.open.add(lisc.dol);
                    //wezel=lisc;
                    licznik+=1;
                
}  
               
            
}
            if (y0 - 1 >= 0) //lewo
            {

                //jest=false;
                Wezel temp=new Wezel(lisc.stan);
                int pom = temp.stan[x0][y0];
                temp.stan[x0][y0] = temp.stan[x0][y0 - 1];
                temp.stan[x0][y0 - 1] = pom;
                
                 //ustalenie hash-u
                hash = hashF1(temp);
                
                //sprawdzenie czy takiego sanu nie ma juz w drzewie, za pomoca tablicy hash-ow
                //1324234 oraz 1324213 losowe liczby przeciwdzalajace temu zeby 2 stany nie mialy tego samego hash-u
                if (stanHash[hash % 1324234] != true && stanHash[hash % 1324213] != true)
                {

                    stanHash[hash % 1324234] = true;
                    stanHash[hash % 1324213] = true;
                    temp.rodzic=lisc;
                    lisc.lewo=temp;
                    tree.open.add(lisc.lewo);
                    //wezel=lisc;
                    licznik+=1;
                
}  
               
            
}
            if (y0 + 1 <=2) //prawo
            {

                //jest=false;
                Wezel temp=new Wezel(lisc.stan);
                int pom = temp.stan[x0][y0];
                temp.stan[x0][y0] = temp.stan[x0][y0 + 1];
                temp.stan[x0][y0 + 1] = pom;
                
                 //ustalenie hash-u
                hash = hashF1(temp);
                
                //sprawdzenie czy takiego sanu nie ma juz w drzewie, za pomoca tablicy hash-ow
                //1324234 oraz 1324213 losowe liczby przeciwdzalajace temu zeby 2 stany nie mialy tego samego hash-u
                if (stanHash[hash % 1324234] != true && stanHash[hash % 1324213] != true)
                {

                    stanHash[hash % 1324234] = true;
                    stanHash[hash % 1324213] = true;
                    temp.rodzic=lisc;
                    lisc.prawo=temp;
                    tree.open.add(lisc.prawo);
                    //wezel=lisc;
                    licznik+=1;
                
}  
                
            
}
        
}
        return wezel;
    
}
    
    public static Wezel metodaA(Wezel wezel, int funkcja)
    {

        Drzewo agwiazdka = new Drzewo();
         agwiazdka.open.add(wezel);
         Wezel wygrany=null;
         Wezel min=null;
         int indeks=0;
         while(!agwiazdka.open.isEmpty())
         {

            //wszerz.closed.add(wszerz.open.get(1));
            for( int i=0; i<agwiazdka.open.size(); i++ )
            {

                if(min == null) 
                {

                    min=agwiazdka.open.get(i); 
                    indeks=i;
		
}
		if(min.ocena > agwiazdka.open.get(i).ocena) 
                {

                    min = agwiazdka.open.get(i);
                    indeks=i;
		
}
            
}
            agwiazdka.open.remove(indeks);
            Wezel temp=min;
            min = null;
            if (Wygrana(temp))
            {
                
                wygrany = temp;
                break;
            
}  
            if (temp.dol != null)
            {

                if (funkcja==1)
                    temp.dol.ocena=funOceniajaca1(temp.dol);
                else
                    temp.dol.ocena=funOceniajaca2(temp.dol);
                agwiazdka.open.add(temp.dol);
                agwiazdka.closed.add(temp.dol);
            
}
            if (temp.gora != null)
            {

                if (funkcja==1)
                    temp.gora.ocena=funOceniajaca1(temp.gora);
                else
                    temp.gora.ocena=funOceniajaca2(temp.gora);
                agwiazdka.open.add(temp.gora);
                agwiazdka.closed.add(temp.gora);
            
}
            if (temp.lewo != null)
            {

                if (funkcja==1)
                    temp.lewo.ocena=funOceniajaca1(temp.lewo);
                else
                    temp.lewo.ocena=funOceniajaca2(temp.lewo);
                agwiazdka.open.add(temp.lewo);
                agwiazdka.closed.add(temp.lewo);
            
}
            if (temp.prawo != null)
            {

               if (funkcja==1)
                   temp.prawo.ocena=funOceniajaca1(temp.prawo);
               else
                   temp.prawo.ocena=funOceniajaca2(temp.prawo);
               agwiazdka.open.add(temp.prawo);
               agwiazdka.closed.add(temp.prawo);
            
}
            licznik++;
         
         
}
         for (int i=0; i<agwiazdka.closed.size(); i++)
         {

            agwiazdka.closed.get(i).ocena=0;
         
}
         agwiazdka.closed.clear();
         return wygrany;
    
}
    
    public static void main(String[] args) {

        // TODO code application logic here
        
         zero[0][0] = 1;
         zero[0][1] = 2;
         zero[0][2] = 3;
         zero[1][0] = 4;
         zero[1][1] = 5;
         zero[1][2] = 6;
         zero[2][0] = 7;
         zero[2][1] = 8;
         zer
...
...
(文件超长,未完全显示,请下载后阅读剩余部分)
			
...
展开> <收缩

下载源码到电脑,阅读使用更方便

1 积分

快速下载
还剩0行未阅读,继续阅读
云测速

源码文件列表

温馨提示: 点击源码文件名可预览文件内容哦 ^_^
...
名称 大小 修改日期
Drzewo.java404.00 B08-04-09|16:06
Main.java17.39 kB08-04-09|16:06
Wezel.java715.00 B08-04-09|16:06
云测速

Main.java (3.51 kB)

需要 1 积分
您持有 积分

CodeForge积分(原CF币)全新升级,功能更强大,使用更便捷,不仅可以用来下载海量源代码马上还可兑换精美小礼品了 了解更多

您的积分不足

支付宝优惠套餐快速获取 30 积分

订单支付完成后,积分将自动加入到您的账号。以下是优惠期的人民币价格,优惠期过后将恢复美元价格。

更多付款方式:网银PayPal

上传代码,免费获取

您本次下载所消耗的积分将转交上传作者。

同一源码,30天内重复下载,只扣除一次积分。

登录 CodeForge

还没有CodeForge账号? 立即注册
关注微博
联系客服

Switch to the English version?

Yes
CodeForge 英文版
No
CodeForge 中文版

完善个人资料,获价值¥30元积分奖励!

^_^"呃 ...

Sorry!这位大神很神秘,未开通博客呢,请浏览一下其他的吧
好的