楼主: YukunVVan
跳转到指定楼层
上一主题 下一主题
收起左侧

趁还没忘记赶紧来发狗家昂赛

   
🔗
wdwwqr 2018-9-13 10:02:35 | 只看该作者
全局:
liweiheng 发表于 2018-9-3 03:41
请问,你这个代码会不会由于一种区域把棋盘分割成了两部分导致其他的颜色区域没法生成联通区域?

补充内 ...

时间有点久了,代码应该是没有问题的,不知道提交的时候,为什么所有的【i】都被omit了。您可以再看看
回复

使用道具 举报

🔗
wdwwqr 2018-9-13 10:03:58 | 只看该作者
全局:
  1. import java.util.*;

  2. public class Test {
  3.     public static void main(String[] args){
  4.         Solution s = new Solution();
  5.         int[][] map = s.randomIslands();
  6.         for(int i = 0; i < 8; i++) {
  7.             for(int j = 0; j < 8; j++) {
  8.                 System.out.print(map[i][j] + " ");
  9.             }
  10.             System.out.println();
  11.         }
  12.     }
  13. }

  14. class Solution {
  15.     Random rand = new Random();
  16.     int[][] map = new int[8][8];

  17.     public int[][] randomIslands() {

  18.         Stack<int[]>[] stacks = new Stack[4];
  19.         for(int i = 0; i < 4; i++)
  20.             stacks[i] = new Stack<>();

  21.         int[][] starts = new int[4][2];

  22.         //generate four start points
  23.         generateStarts(starts, stacks);

  24.         while(true) {
  25.             for(int i = 0; i < 4; i++) {
  26.                 if(stacks[i].size() < 16) {
  27.                     int[] start = stacks[i].peek();

  28.                     // if no exist way, keep pop the stack
  29.                     while (existWay(start) == null && !stacks[i].isEmpty())
  30.                         start = stacks[i].pop();

  31.                     //if stack is empty and no valid way, the start points is invalid, regenerate the start points
  32.                     if (existWay(start) == null && stacks[i].isEmpty()) {
  33.                         for(int j = 0; j < 8; j++)
  34.                             Arrays.fill(map[j], 0);
  35.                         for(int j = 0; j < 4; j++)
  36.                             stacks[j] = new Stack<>();
  37.                         generateStarts(starts, stacks);
  38.                         break;
  39.                     }

  40.                     int[] newStart = existWay(start);
  41.                     map[newStart[0]][newStart[1]] = i + 1;
  42.                     stacks[i].add(newStart);
  43.                 }
  44.             }
  45.             if(stacks[0].size() == 16 && stacks[1].size() == 16 && stacks[2].size() == 16 && stacks[3].size() == 16)
  46.                 break;
  47.         }
  48.         return map;
  49.     }
  50.     private void generateStarts(int[][] starts, Stack<int[]>[] stacks) {
  51.         for(int i = 0; i < 4; i++) {

  52.             int x = rand.nextInt(8);
  53.             int y = rand.nextInt(8);

  54.             //insure there is no same start points
  55.             while(map[x][y] != 0) {
  56.                 x = rand.nextInt(8);
  57.                 y = rand.nextInt(8);
  58.             }

  59.             //count the groups as 1, 2, 3, 4
  60.             map[x][y] = i + 1;

  61.             starts[i][0] = x;
  62.             starts[i][1] = y;
  63.         }

  64.         //add the start points into stacks
  65.         for(int i = 0; i < 4; i++) {
  66.             stacks[i].add(starts[i]);
  67.         }
  68.     }
  69.     private int[] existWay(int[] pts) {
  70.         int[][] moves = new int[][] {{0, 1}, {0, -1}, {1, 0}, {-1, 0}};
  71.         ArrayList<int[]> arr = new ArrayList<>();
  72.         for(int i = 0; i < 4; i++) {
  73.             int x = pts[0] + moves[i][0];
  74.             int y = pts[1] + moves[i][1];
  75.             if(x >= 0 && x < 8 && y >= 0 && y < 8 && map[x][y] == 0)
  76.                 arr.add(new int[]{x, y});
  77.         }
  78.         if(arr.size() != 0) {
  79.             return arr.get(rand.nextInt(arr.size()));
  80.         }
  81.         return null;
  82.     }
  83. }
复制代码


这样应该好一点,之前所有【i】都被omit了,具体思路我都记不清了,好像就是暴力解的

补充内容 (2018-9-13 10:04):
曰,这个也忽略,什么鬼,所有【i】还是都被清除了

补充内容 (2018-9-13 10:06):
一刷新就好了???自己演了场戏,呵呵呵呵
回复

使用道具 举报

全局:
您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies
回复

使用道具 举报

🔗
nicezg 2018-9-15 04:28:25 | 只看该作者
全局:
希望大叔的内心也和看起来一样善良..
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表