NO.01
认证: 论文检测

掌柜:论文查重第一家

点击这里给我发消息

支付宝个人认证

2011-03-24

消费者保障协议

该店铺已签署消费者保障协议
已缴纳1000元保证金

店铺动态评分

描述相符5.0

服务态度5.0

物流服务5.0

与同行业相比

高于1.23%

持平0.45%

高于4.31%

开店时长5年老店

论文检测中的循环问题

//Time Limit Exceeded //open 表改用堆实现,还是不行 #include #include using namespace std; const int M = 362880; int heap[M];//堆,open表,存储等待扩展的节点 int hp_bg , hp_end;//堆的首尾 enum state{ notshowup,//未出现 toexpand ,//等待扩展 expanded //已经扩展过 }; struct NODE { char board[9];//九宫格 int len;//从源到当前节点路径长度 int h;//从当前节点到目标的预期长度,即启发函数值 int dad;//父节点dad经过opr操作得到当前节点 int x_pos;//'x'的位置 char opr; state st;//open表中,closed表中,未出现 }node[M]; int move[4][2] = {{-1,0},{+1,0},{0,-1},{0,+1}};//四中操作中行列的变化 inline bool less(int a , int b) { return node[a].h + node[a].len < node[b].h + node[b].len ; } inline int left(int i) { i -= hp_bg; return (i<<1) + 1 + hp_bg; } inline int right(int i) { i -= hp_bg; return (i<<1) +2 + hp_bg; } inline void swapheap(int a , int b) { int temp = heap[a]; heap[a] = heap[b]; heap[b] = temp; } inline void Heapify(int top) { if(top >= hp_end) return ; int l = left(top); int r = right(top); int min = top; if(l < hp_end) if(less(heap[l] , heap[min])) min = l; if(r < hp_end) if(less(heap[r] ,heap[min])) min = r; if(min != top) { swapheap(min, top); Heapify(min); } } inline void BuildHeap() { int cur = (hp_bg + hp_end - 1)/2; for(;cur >= hp_bg; cur--) Heapify(cur); } void read(char src[]) { int i = 0; char ch; while(scanf("%c", &ch) && i <= 8) { if(ch == 'x'|| (ch>='1'&&ch<='8')) { src[i++] = ch; } } } inline int GetKey(char board[]) { int key = 0; int fac[9] = {1,1,2,6,24,120,720,5040,40320}; for(int i = 0; i < 8; i++) { int cnt = 0; for(int j = i+1; j <= 8; j++) { if(board[j] < board[i]) cnt++; } key += fac[8-i] * cnt; } return key; } inline int GetH(char board[]) { char dst[9]; memcpy(dst , "12345678x" , 9); int h = 0; for(int i = 0; i < 8; i++) { if(board[i] != dst[i]) h++; } return h; } int GetPos(char board[]) { int pos = 0; while(board[pos] != 'x') pos++; return pos; } bool FindWay(char src[]) { int pos ,row , col ;//'x'的位置和相应的行列 int newrow , newcol , newpos , newkey;//扩展后得到的新的行列和位置,新键 值 char newboard[9];//新九宫格 int cur;//堆顶 int srckey = GetKey(src);//pos为'x'的位置 heap[hp_end++] = srckey;//加入heap,即open表 node[srckey].dad = -1;//设置源点状态 node[srckey].h = GetH(src); node[srckey].len = 0; node[srckey].opr = '@'; node[srckey].st = toexpand; node[srckey].x_pos = GetPos(src);//'x'的位置 memcpy(node[srckey].board , src , 9);//复制九宫格 while(hp_bg < hp_end)//当堆不空 { BuildHeap();//建最小堆 cur = heap[hp_bg++];//取堆顶,堆变小 node[cur].st = expanded;//设置为被扩展过了 if(cur == 0)//目标 { return true; } pos = node[cur].x_pos; row = pos/3; col = pos%3; //char opr = node[cur].opr; //int opn = opr=='u'?1:opr=='d'?0:opr=='l'?3:2; for(int i = 0; i < 4; i++) { //if(opn == i) // continue; memcpy(newboard , node[cur].board , 9);//拷贝九宫格 newrow = row + move[i][0]; newcol = col + move[i][1]; newpos = newrow*3 + newcol; //验证合法性 if(newrow>=0 && newrow<=2 && newcol >=0 && newcol<=2) { char tmp = newboard[newpos];//更新九宫格 newboard[newpos] = 'x'; newboard[pos] = tmp; newkey = GetKey(newboard);//获得新键值 if(node[newkey].st == notshowup)//新状态 { node[newkey].dad = cur; node[newkey].h = GetH(newboard); node[newkey].len = node[cur].len + 1; node[newkey].opr = i==0?'u':i==1?'d':i ==2?'l':'r'; node[newkey].st = toexpand;//待扩展 node[newkey].x_pos = newpos; memcpy(node[newkey].board , newboard , 9); heap[hp_end++] = newkey;//加入堆,即op en表 } else//老状态 { if(node[newkey].len > node[cur].len + 1) { node[newkey].dad = cur; node[newkey].len = node[cur].l en + 1; node[newkey].opr = i==0?'u':i==1?'d':i==2?'l':'r'; if(node[newkey].st == expanded )//已扩展的状态 { node[newkey].st = toex pand;//待扩展 heap[hp_end++] = newke y;//加入堆,即open表,使待扩展 } } } }//end of if }//end of for }//end of while return false; } void PrintWay() { int cur = 0; int p = 0; char ans[M]; while(node[cur].dad != -1) { ans[p++] = node[cur].opr; cur = node[cur].dad; if(cur == -1) break; } p--; while(p>=0) { printf("%c" , ans[p--]); } printf("\n"); } void init() { for(int i = 0; i < M; i++) { node[i].st = notshowup; } } int main() { char src[9]; read(src); init(); if(FindWay(src)) { PrintWay(); } else printf("unsolvable\n"); return 1; } 论文抄袭检测

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

论文查重:

论文检测,论文查重第一家,是一家以检测抄袭与剽窃、伪造、篡改、不当署名、一稿多投等学术不端文献的论文检测平台,目前主要推荐的知名、权威检测产品包括中国知网的AMLC系统、VIP、TMLC2系统,万方数据库的万方相似比检测系统,维普文检测系统、gaperpass检测系统,等等常见检测软件

推荐软件知网期刊检测AMLC 知网本科检测 知网硕博检测 万方论文相似比检测 维普论文检测

检测须知:

1.此系统一旦提交,开始检测后,概不退款!2.在淘宝中购买宝贝后,可以在“我已购买宝贝”中看到有“订单编号”,知网系统检测需要输入订单编号才能使用。3.Word文档大小请不要超过15MB ,否则将无法上传;请把不必要的图片删除即可(系统不检测图片);4.上传检测的文档格式为Word的docx,doc格式,请勿上传其他格式的文档。

检测入口返回顶部
知网期刊检测
知网本科检测
知网硕博检测
万方论文检测
维普论文检测
paperpass
返回顶部