标签:des style blog http color io os ar for
http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=1157
8 8 3 3 3 4 5 6 6 2 1 7 7
11 96
#include <iostream> #include <stdio.h> #include <string.h> #include <stdlib.h> #include <queue> using namespace std; char map[101][101]; int v[101][101]; struct node { int ans,x,y; }; struct node t,f; int a[2],b[2]; int fx[]= {1,-1,0,0}; int fy[]= {0,0,1,-1}; int n,m,k,flag,sum; void bfs() { queue<node>q; memset(v,0,sizeof(v)); t.x=a[0]; t.y=a[1]; t.ans=0; q.push(t); v[a[0]][a[1]]=1; while(!q.empty()) { t=q.front(); q.pop(); if(t.x==b[0]&&t.y==b[1]) { printf("%d\n",t.ans); flag=t.ans; return ; } for(int i=0; i<4; i++) { f.x=t.x+fx[i]; f.y=t.y+fy[i]; if(f.x>=1&&f.x<=n&&f.y>=1&&f.y<=m&&v[f.x][f.y]==0&&map[f.x][f.y]!=1) { f.ans=t.ans+1; v[f.x][f.y]=1; q.push(f); } } } printf("No Solution!\n"); return ; } void dfs(int xx,int yy,int ans) { int tx,ty; if(xx==b[0]&&yy==b[1]&&ans==flag) { sum++; } if(xx>b[0]||yy>b[1]||ans>=flag) return ; for(int i=0; i<4; i++) { tx=xx+fx[i]; ty=yy+fy[i]; if(tx>=1&&tx<=n&&ty>=1&&ty<=m&&v[tx][ty]==0&&map[tx][ty]!=1&&ans<flag) { v[tx][ty]=1; dfs(tx,ty,ans+1); v[tx][ty]=0; } } } int main() { int xx,yy; while(scanf("%d%d%d",&n,&m,&k)!=EOF) { flag=0; sum=0; memset(map,0,sizeof(map)); for(int i=1; i<=k; i++) { scanf("%d%d",&xx,&yy); map[xx][yy]=1; } scanf("%d%d",&a[0],&a[1]); scanf("%d%d",&b[0],&b[1]); bfs(); if(flag==0) continue; memset(v,0,sizeof(v)); v[a[0]][a[1]]=0; dfs(a[0],a[1],0); printf("%d\n",sum); } return 0; }
标签:des style blog http color io os ar for
原文地址:http://www.cnblogs.com/zhangmingcheng/p/3978001.html