青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

我要啦免费统计
#include <stdio.h>
#include 
<stdlib.h>
#include 
<assert.h>

#define NAME "starry"
/* MAXSTAR is the largest a cluster can be */
#define MAXSTAR 160

/* the board */
char board[100][100];
int w, h;

/* clusters already lettered */
int stars[26][MAXSTAR]; /* stars are stored as xval + yval*1000 */
int count[26]; /* number of stars */
int size[26][2]; /* the x & y dimensions */
int nstart; /* number of clusters */

/* the current cluster */
int current[MAXSTAR][2]; /* y, x */
int ncurrent; /* number of stars in current cluster */

/* int_comp is integer comparison, used for bsearch and qsort */
int
int_comp(
const void *pa, const void *pb)
 {
  
int a = *(int*)pa;
  
int b = *(int*)pb;
  
if (a > b) return 1;
  
else if (a < b) return -1;
  
else return 0;
 }

/* find the boundary (in my,mx,My, and Mx.. m is minimum, M is maximum */
/* also fills in current */
int
find_boundary(
int y, int x, int *my, int *mx, int *My, int *Mx)
 {
  
int rv = 0;
  
if (board[y][x] != '1'return 0/* not a star or already visited */
  rv
++/* one more star */
  board[y][x] 
= '2'/* mark as visited */

  
/* put in current cluster */
  current[ncurrent][
0= y;
  current[ncurrent][
1= x;
  ncurrent
++;

  
/* update boundary */
  
if (y < *my) *my = y;
  
if (y > *My) *My = y;
  
if (x < *mx) *mx = x;
  
if (x > *Mx) *Mx = x;

  
/* check all adjacent stars */
  
if (x > 0
   {
    x
--;
    rv 
+= find_boundary(y, x, my, mx, My, Mx);
    
if (y > 0) rv += find_boundary(y-1, x, my, mx, My, Mx);
    
if (y+1 < h) rv += find_boundary(y+1, x, my, mx, My, Mx);
    x
++;
   }
  
if (y > 0) rv += find_boundary(y-1, x, my, mx, My, Mx);
  
if (y+1 < h) rv += find_boundary(y+1, x, my, mx, My, Mx);
  
if (x+1 < w)
   {
    x
++;
    rv 
+= find_boundary(y, x, my, mx, My, Mx);
    
if (y > 0) rv += find_boundary(y-1, x, my, mx, My, Mx);
    
if (y+1 < h) rv += find_boundary(y+1, x, my, mx, My, Mx);
    x
--;
   }
  
return rv;
 }

/* this is a very basic flood fillfill ch everywhere there's not a '0' */
void
mark_shape(
int y, int x, char ch)
 {
  
if (board[y][x] == ch) return/* done already */
  
if (board[y][x] == '0'return/* nothing to do */

  board[y][x] 
= ch;

  
/* recurse on all boundary stars */
  
if (x > 0
   {
    x
--;
    mark_shape(y, x, ch);
    
if (y > 0) mark_shape(y-1, x, ch);
    
if (y+1 < h) mark_shape(y+1, x, ch);
    x
++;
   }
  
if (y > 0) mark_shape(y-1, x, ch);
  
if (y+1 < h) mark_shape(y+1, x, ch);
  
if (x+1 < w) 
   {
    x
++;
    mark_shape(y, x, ch);
    
if (y > 0) mark_shape(y-1, x, ch);
    
if (y+1 < h) mark_shape(y+1, x, ch);
   }
 }

/* is shape id the same as the current shape */
/* specify the orientation with dy/dx and by/bx */
/* dy/dx is the difference value to associate with y and x changes */
/* by/bx is the upper right corner of the bounding box with respect
   to the current orientation 
*/
/* NOTE: assumes that the number of stars are the same */
int
check_shape(
int id, int dy, int dx, int by, int bx)
 {
  
int lv;
  
int pval;

  
for (lv = 0; lv < ncurrent; lv++)
   {
    pval 
= (current[lv][0]-by)*dy + (current[lv][1]-bx)*dx;
    
if (!bsearch(&pval, stars[id], count[id], sizeof(stars[id][0]), int_comp))
      
return 0/* found a star that didn't match */
   }
  
return 1;
 }

/* we found a star here, make it a cluster */
void
fix_board(
int y, int x)
 {
  
int mx, my, Mx, My;
  
int cnt;
  
int lv;
  
int pw, ph;
  
int f;

/* gather the cluster information */
  mx 
= Mx = x;
  my 
= My = y;

  ncurrent 
= 0;
  cnt 
= find_boundary(y, x, &my, &mx, &My, &Mx);

  pw 
= Mx - mx + 1;
  ph 
= My - my + 1;

  f 
= 0;
  
/* check each cluster */
  
for (lv = 0; lv < nstart; lv++)
    
if (cnt == count[lv]) /* the cluster must have the same # of stars */
     {
      
if (pw == size[lv][1&& ph == size[lv][0])
       { 
/* the bounding box sizes match */
 f 
+= check_shape(lv, 10001, my, mx);
 f 
+= check_shape(lv, 1000-1, my, Mx);
 f 
+= check_shape(lv, -10001, My, mx);
 f 
+= check_shape(lv, -1000-1, My, Mx);
       }
      
if (pw == size[lv][0&& ph == size[lv][1])
       { 
/* the bounding box sizes match */
 f 
+= check_shape(lv, 11000, my, mx);
 f 
+= check_shape(lv, 1-1000, my, Mx);
 f 
+= check_shape(lv, -11000, My, mx);
 f 
+= check_shape(lv, -1-1000, My, Mx);
       }
      
if (f) break;
     }
  
if (f) mark_shape(y, x, 'a' + lv); /* found match */
  
else { /* new cluster! */
    count[nstart] 
= 0;
    mark_shape(y, x, 
'a' + nstart);
    
for (lv = 0; lv < ncurrent; lv++)
      stars[nstart][lv] 
= (current[lv][0]-my)*1000 + (current[lv][1]-mx);
    count[nstart] 
= ncurrent;
    
/* we need the stars in increasing order */
    qsort(stars[nstart], count[nstart], 
sizeof(stars[nstart][0]), int_comp);
    size[nstart][
0= ph;
    size[nstart][
1= pw;
    nstart
++;
   }
 }

int
main(
int argc, char **argv)
 {
  
//FILE *fin, *fout;
  int lv, lv2;

  
//fin = fopen(NAME ".in", "r");
  
//fout = fopen(NAME ".out", "w");
  
//assert(fin);
 
// assert(fout);

/* read in the data */
  scanf (
"%d %d"&w, &h);

  
for (lv = 0; lv < h; lv++) scanf ("%s", board[lv]);
 
// fclose(fin);

/* everywhere there's a star not in a cluster, make it into one */
  
for (lv = 0; lv < h; lv++)
    
for (lv2 = 0; lv2 < w; lv2++)
      
if (board[lv][lv2] == '1')
        fix_board(lv, lv2);

/* output data */
  
for (lv = 0; lv < h; lv++)
   {
    printf (
"%c", board[lv][0]);
    
for (lv2 = 1; lv2 < w; lv2++)
      printf (
"%c", board[lv][lv2]);
     printf ( 
"\n");
   }

 
// fclose(fout);
  return 0;
 }


修改 usaco 分析的代碼
floodfill找出1的區域  在和以前找出的區域 旋轉匹配 如果找到則用前面那個編號 找不到則編號加1

posted on 2008-10-11 15:58 閱讀(447) 評論(0)  編輯 收藏 引用 所屬分類: pku
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美日韩精品一区视频| 欧美在线播放一区| 欧美视频你懂的| 欧美视频在线观看一区| 欧美午夜大胆人体| 国产精品一区二区久久久久| 国产日本欧美一区二区三区在线| 国产精品久久久久一区| 国产欧美日韩一区| 黄色成人av网站| 亚洲精品美女免费| 亚洲一区在线视频| 久久视频国产精品免费视频在线 | 国产精品久久久久免费a∨大胸| 久久亚洲高清| 国产精品久久77777| 国产精品一区二区三区四区| 国产一区二区日韩精品欧美精品| 精品999日本| 亚洲免费av电影| 久久av一区二区三区亚洲| 欧美激情一区二区三区全黄| 正在播放欧美视频| 久久久久久久一区二区三区| 欧美日韩一级视频| 一区二区在线视频播放| 9人人澡人人爽人人精品| 久久激情一区| 一本色道久久88综合日韩精品| 久久国产精品久久久| 欧美日韩亚洲高清| 亚洲大胆人体在线| 香蕉久久一区二区不卡无毒影院 | 国内不卡一区二区三区| 99re66热这里只有精品4| 久久国产一区| 宅男66日本亚洲欧美视频| 美国十次成人| 国产亚洲精品一区二555| 亚洲视频在线看| 亚洲激情一区| 性久久久久久久久久久久| 欧美日韩国产区| 91久久久亚洲精品| 久热精品视频在线观看一区| 亚洲欧美激情视频| 国产精品国产三级国产普通话99| 在线免费精品视频| 欧美一区国产二区| 亚洲综合色丁香婷婷六月图片| 欧美激情精品久久久久| 亚洲国产毛片完整版| 麻豆精品一区二区综合av| 香蕉久久一区二区不卡无毒影院| 欧美日韩在线视频一区| 99精品国产福利在线观看免费| 欧美国产免费| 久久久五月婷婷| 亚洲成人在线免费| 欧美成人日韩| 欧美 日韩 国产 一区| 亚洲国产美女精品久久久久∴| 久久久久国产精品厨房| 欧美一区二区三区的| 国产亚洲综合在线| 久久资源在线| 男女精品网站| 亚洲天堂成人| 午夜亚洲性色视频| 精品88久久久久88久久久| 欧美+亚洲+精品+三区| 狠狠色狠色综合曰曰| 久久精品一区二区三区不卡牛牛| 羞羞漫画18久久大片| 99成人精品| 一本久道久久综合狠狠爱| 国产女人18毛片水18精品| 欧美成人免费视频| 国内成人在线| 久久久久久香蕉网| 米奇777超碰欧美日韩亚洲| 国产专区一区| 久久全球大尺度高清视频| 久久一区二区精品| 国产亚洲精品成人av久久ww| 亚洲一区视频| 久久亚裔精品欧美| 亚洲高清在线精品| 欧美三区在线视频| 亚洲欧美成人在线| 免费在线观看成人av| 亚洲毛片视频| 国产精品福利av| 亚洲乱码国产乱码精品精| 亚洲一区二区三区成人在线视频精品| 欧美另类综合| 久久久国产精品一区| 亚洲日本一区二区三区| 亚洲一区二区在线免费观看| 国产精品久久久久久久久久免费看 | 亚洲免费激情| 欧美精品免费在线| 日韩视频久久| 久久久久女教师免费一区| 国产精品h在线观看| 久久久久久久一区| 亚洲一区二区视频| 亚洲美女av在线播放| 久久频这里精品99香蕉| 性欧美激情精品| 亚洲一区二区视频在线观看| 亚洲激情欧美| 亚洲人成高清| 亚洲人成7777| 亚洲精品九九| 夜色激情一区二区| 日韩一级黄色片| 99热精品在线观看| 一区二区三区欧美激情| 中国成人亚色综合网站| 一区二区福利| 午夜精品久久久久久久久久久| 亚洲精品中文字幕女同| 国产一区二区av| 国产一区二区三区精品久久久| 国产精品天天看| 在线精品高清中文字幕| 亚洲黄色一区| 亚洲在线观看视频网站| 亚洲欧美日韩国产一区二区| 亚洲欧美国产高清| 久久久久九九九| 亚洲国产高清在线| 亚洲一区二区三区中文字幕在线 | 91久久精品www人人做人人爽| 欧美成人一区在线| 亚洲视频欧美视频| 久久夜色精品一区| 国产精品午夜视频| 亚洲人成精品久久久久| 亚洲深爱激情| 欧美激情一区二区三区蜜桃视频| 欧美系列精品| 亚洲精品一二区| 免费一级欧美在线大片| 亚洲一区影院| 国产精品va在线| 亚洲老板91色精品久久| 欧美r片在线| 久久九九99视频| 国产一区二区三区高清| 午夜国产精品视频| 99v久久综合狠狠综合久久| 老司机成人在线视频| 在线不卡亚洲| 毛片av中文字幕一区二区| 香蕉尹人综合在线观看| 国产日产亚洲精品| 久久国产福利| 欧美一区二区大片| 国产精品美女主播| 亚久久调教视频| 欧美一区二区国产| 一区二区视频欧美| 91久久在线视频| 国产精品久久97| 久久中文字幕一区| 欧美极品色图| 久久精品2019中文字幕| 老司机久久99久久精品播放免费 | 国产精品一区一区三区| 午夜精品久久久久久久男人的天堂| 日韩午夜黄色| 国色天香一区二区| 亚洲欧洲免费视频| 国产女人18毛片水18精品| 免费成人av资源网| 国产精品久久久久久久电影| 宅男噜噜噜66一区二区 | 国产日韩av在线播放| 久久国内精品视频| 欧美成人69av| 免费不卡在线视频| 欧美日本簧片| 亚洲高清在线精品| 怡红院精品视频| 一区二区三区毛片| 日韩一区二区精品葵司在线| 久久成人一区| 久久婷婷色综合| 国产日韩欧美在线一区| 亚洲网站在线| 欧美一区二区三区视频在线观看| 欧美猛交免费看| 亚洲精品视频免费观看| 亚洲韩国精品一区| 欧美好吊妞视频| 亚洲一区二区3| 亚洲精品久久久久久久久久久久 | 亚洲婷婷国产精品电影人久久|